LeetCode Day10:合并两个有序数组

发布于 2022-08-30  41 次阅读


题号:88
难度:Easy
链接:https://leetcode.cn/problems/merge-sorted-array

思路

空间都在nums1中分配好了,从其最后一位开始填入即可。

设三个指针,分别指向m-1n-1m+n-1,将前两者中更大的元素填入后者,并--指针即可。

代码

#include <vector>

using std::vector;

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        if(m==0){
            nums1=nums2;
            return;
        }
        if(n==0) return;
        int i=m-1,j=n-1,k=m+n-1;
        while(k>=0){
            int val_1=(i<0)?nums2[j]-1:nums1[i];
            int val_2=(j<0)?nums1[i]-1:nums2[j];
            if(val_1>val_2){
                nums1[k--]=val_1;
                --i;
            }
            else{
                nums1[k--]=val_2;
                --j;
            }
        }
    }
};

提交结果

LeetCode-Day10:合并两个有序数组-2022-08-31-08-31-34

全文完