diff --git a/solution/0088.Merge Sorted Array/Solution.go b/solution/0088.Merge Sorted Array/Solution.go new file mode 100644 index 0000000000000..21864f1e74c8e --- /dev/null +++ b/solution/0088.Merge Sorted Array/Solution.go @@ -0,0 +1,20 @@ +func merge(nums1 []int, m int, nums2 []int, n int) { + ret := make([]int, m+n) + copy(ret, nums1[:m]) + p0, p1, p2 := 0, 0, 0 + for ; p1 < m && p2 < n; p0++ { + if nums1[p1] >= nums2[p2] { + ret[p0] = nums2[p2] + p2++ + } else if nums1[p1] < nums2[p2] { + ret[p0] = nums1[p1] + p1++ + } + } + if p1 < m { + copy(nums1, append(ret[:p0], nums1[p1:m]...)) + } + if p2 < n { + copy(nums1, append(ret[:p0], nums2[p2:]...)) + } +} diff --git a/solution/0088.Merge Sorted Array/Solution2.go b/solution/0088.Merge Sorted Array/Solution2.go new file mode 100644 index 0000000000000..967affc846148 --- /dev/null +++ b/solution/0088.Merge Sorted Array/Solution2.go @@ -0,0 +1,18 @@ + func merge(nums1 []int, m int, nums2 []int, n int) { + right, p1, p2 := m+n-1, m-1, n-1 + for p1 >= 0 && p2 >= 0 { + if nums1[p1] < nums2[p2] { + nums1[right] = nums2[p2] + p2-- + right-- + } else if nums1[p1] >= nums2[p2] { + nums1[right] = nums1[p1] + p1-- + right-- + } + } + // copy(nums1, append(nums2[:p2+1], nums1[p2+1:]...)) + for i := 0; i <= p2; i++ { + nums1[i] = nums2[i] + } +}