https://leetcode-cn.com/problems/merge-sorted-array/
还是挺简单的,可以直接合并然后sort,也可以另开辟数组利用双指针填充然后复制到nums1
当然,最好是三指针,很开心自己马上就想到这种方法了
方法:从后向前填充nums1,不用额外开辟空间
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int n1l=m-1,n1r=m+n-1,n2=n-1;
while(n1l>=0&&n2>=00){
if(nums1[n1l]>nums2[n2]){
nums1[n1r]=nums1[n1l];
--n1l;
--n1r;
}
else{
nums1[n1r]=nums2[n2];
--n1r;
--n2;
}
}
if(n2>=0){//若nums2还有 剩余(nums1还用剩余直接就不用管了)
while(n1r>=0){
nums1[n1r]=nums2[n2];
--n1r;
--n2;
}
}
}
};
时间复杂度:O(m+n)
空间复杂度:O(1)