Contact me:

算法31 88. 合并两个有序数组

最容易想到的

利用sort()

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        for(int i=0;i<n;i++){
            nums1[m+i]=nums2[i];
        }
        sort(nums1.begin(),nums1.end());
    }
};

归并排序

因为有序,左右分别提一个比较

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int a,b; 
        a=b=0;
        vector<int> tmp;
        while(a<m&&b<n){
            (nums1[a]>nums2[b]) ? tmp.push_back(nums2[b++]):tmp.push_back(nums1[a++]);
        }
        while(a<m) tmp.push_back(nums1[a++]);
        while(b<n) tmp.push_back(nums2[b++]);
        
        nums1=(move(tmp));
        
    }
};

再优化一点

nums1已给出空间,利用该空间从后往前归并

class Solution {
public:
   void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int a=m+n-1;
        m--;
        n--;
        while(n>=0)  nums1[a--]=(m>=0&&nums1[m]>nums2[n]) ? nums1[m--]:nums2[n--];
    
    }
};
posted @ 2021-12-18 11:32  impwa  阅读(25)  评论(0编辑  收藏  举报