88. 合并两个有序数组
本题其实并不想写题解的,但是本题的空间优化又让我感到奇妙无比。
我的思路
创建一个新的数组tmp
,用于存放nums1
中的元素。然后对tmp
和nums2
进行 归并排序 中的 合并,将排序结果放入nums1
中即可。
AC代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> tmp(nums1.begin(), nums1.begin() + m);
int i = 0, j = 0, k = 0;
while (i < m && j < n){
if (tmp[i] < nums2[j]){
nums1[k++] = tmp[i];
i ++;
}else{
nums1[k++] = nums2[j];
j ++;
}
}
while (i < m){
nums1[k++] = tmp[i++];
}
while (j < n){
nums1[k++] = nums2[j++];
}
return ;
}
};
执行用时:4 ms, 在所有 C++ 提交中击败了63.89%的用户
内存消耗:8.8 MB, 在所有 C++ 提交中击败了73.80%的用户
- 复杂度分析
- 时间复杂度: O ( m + n )