88. 合并两个有序数组

题目#

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1使 nums1 成为一个有序数组。

初始化 nums1nums2 的元素数量分别为 mn 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示:

  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • -109 <= nums1[i], nums2[i] <= 109

思路#

由于 nums1 里的空间是够的,所以可以从 nums1 后面开始,进行一个选择排序。

代码#

func merge(nums1 []int, m int, nums2 []int, n int) {
i := m - 1
j := n - 1
k := m + n - 1
// 从后往前
for ; i >= 0 && j >= 0; k-- {
// 选择较大的
if nums1[i] > nums2[j] {
nums1[k] = nums1[i]
i--
} else {
nums1[k] = nums2[j]
j--
}
}
// 如果 j == 0, i > 0,不需要做处理(剩下的已经在位置上了)
// 如果 i == 0, j > 0,处理一下
for ; j >= 0; k-- {
nums1[k] = nums2[j]
j--
}
}
Last updated on