- 合并两个有序序列,尽量利用已有空间。
(1)合并有序数组:
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6],其中nums1数组无限大。
不要太纠结于不能分配空间上面,从新空间的位置从后向前,放两个数组中较大的元素。这样避免了插入时移动元素,新空间就是nums1数组,因为从后面向前不会造成刚放置的元素被覆盖的情况。
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - 1, j = n - 1, k = m + n - 1;
while (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) nums1[k--] = nums1[i--];
else nums1[k--] = nums2[j--];
}
while (j >= 0) nums1[k--] = nums2[j--];
w