题目地址:
https://leetcode.com/problems/merge-sorted-array/description/
合并两个有序数组,分别为数组 a a a和 b b b。将合并后的数组放入 a a a。题目保证 a a a足够长。
二路归并。从后向前填数即可。代码如下:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int idx = nums1.size() - 1;
for (int i = m - 1, j = n - 1; i >= 0 || j >= 0;) {
if (j == -1) {
while (i >= 0) nums1[idx--] = nums1[i--];
break;
}
if (i == -1) {
while (j >= 0) nums1[idx--] = nums2[j--];
break;
}
if (nums1[i] >= nums2[j])
nums1[idx--] = nums1[i--];
else
nums1[idx--] = nums2[j--];
}
}
};
时间复杂度 O ( l a + l b ) O(l_a+l_b) O(la+lb),空间 O ( 1 ) O(1) O(1)。