functionmerge(nums1, m, nums2, n) { let p1 = 0, p2 = 0 let sorted = newArray(m + n).fill(0) let cur while (p1 < m || p2 < n) { if (p1 === m) { cur = nums2[p2++] } elseif (p2 === n) { cur = nums1[p1++] } elseif (nums1[p1] < nums2[p2]) { cur = nums1[p1++] } else { cur = nums2[p2++] } sorted[p1 + p2 - 1] = cur } for (let i = 0; i < sorted.length; i++) { nums1[i] = sorted[i] } }
let nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
merge(nums1, m, nums2, n)
// 或者使用下面这种方法,内存占用稍微大一些 const mergeSortedArrays = function(nums1, m, nums2, n) { let p1 = m - 1; // nums1 的末尾指针 let p2 = n - 1; // nums2 的末尾指针 let p = m + n - 1; // 合并后的数组的末尾指针
funcmergeSortedArrays(nums1, nums2 []int, m, n int) { p1, p2 := 0, 0 var cur int sortedArray := make([]int, m+n) for p1 < m || p2 < n { if p1 == m { cur = nums2[p2] p2++ } elseif p2 == n { cur = nums1[p1] p1++ } elseif nums1[p1] < nums2[p2] { cur = nums1[p1] p1++ } else { cur = nums2[p2] p2++ } sortedArray[p1+p2-1] = cur } for i, v := range sortedArray { nums1[i] = v } }
funcmain() { nums1, m := []int{1, 2, 3, 0, 0, 0}, 3 nums2, n := []int{2, 5, 6}, 3
mergeSortedArrays(nums1, nums2, m, n) fmt.Println(nums1) // [1,2,2,3,5,6] }