天天看點

力扣-88題 合并兩個有序數組(C++)- 從後往前防覆寫

題目連結:https://leetcode-cn.com/problems/merge-sorted-array/

題目如下:

力扣-88題 合并兩個有序數組(C++)- 從後往前防覆寫
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        //已知條件:nums1數組的空餘位置在最後,兩個數組都是有序的
        //思路:
        //1、nums2依次放入nums1數組中
        //2、為了以防nums1數組前面部分會被覆寫,是以應該從後往前放,避免覆寫出現
        
        if((m==nums1.size())||(n==0)) return ;
        int total=m+n;
        m--;n--;

        while(m>=0&&n>=0){
            
            if(nums1[m]>nums2[n]){
                nums1[--total]=nums1[m--];
            }
            else {
                nums1[--total]=nums2[n--];
            }            
        }

        while(n>=0){
            nums1[--total]=nums2[n--];
        }

    }
};