-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0088.Merge Sorted Array.swift
42 lines (35 loc) · 1.1 KB
/
0088.Merge Sorted Array.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Solution {
func merge(_ nums1: inout [Int], _ m: Int, _ nums2: [Int], _ n: Int) {
// print(nums1)
// print(nums2)
if nums1.count == m {
return
}
if m == 0 {
nums1 = nums2
return
}
for i in stride(from: m-1, through: 0, by: -1) {
// print("Swaping \(nums1[i])(\(i)) and \(nums1[nums1.count-(m-i)])(\(nums1.count-(m-i)))")
nums1.swapAt(i, nums1.count-(m-i))
}
// print(nums1)
var mIdx = nums1.count - m
var nIdx = 0
for i in 0..<nums1.count {
if nIdx >= n {
mIdx += 1
continue
}
if mIdx < nums1.count && nums1[mIdx] < nums2[nIdx] {
nums1.swapAt(i, mIdx)
mIdx += 1
} else {
nums1[i] = nums2[nIdx]
nIdx += 1
}
// print("Iteration \(i): \(nums1) \(nums2), \tmIdx=\(mIdx), nIdx=\(nIdx)")
}
// print(nums1)
}
}