天天看点

力扣-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--];
        }

    }
};