88. 合并两个有序数组
分析
核心思路:从后往前双指针合并
- 由于
nums1
后面有足够的空间,可以从后往前填充最大元素,避免频繁移动数据 - 使用双指针分别指向两个数组的末尾,逐步比较并将较大的数放到
nums1
的最后
- 初始化指针:
i = m - 1
:指向nums1
有效部分的末尾j = n - 1
:指向nums2
的末尾k = m + n - 1
:指向nums1
的末尾(总长度)
- 双指针比较:
- 比较
nums1[i]
和nums2[j]
,将较大值放到nums1[k]
,然后指针向前移动
- 比较
- 处理剩余元素:
- 如果
nums2
还有剩余元素,继续填充到nums1
中(nums1
剩下的部分已经是有序的,无需处理)
- 如果
时间复杂度
时间复杂度:O(m + n)
空间复杂度
空间复杂度:O(1)
C++代码
|
|