【Leetcode】88、合并两个有序数组 Easy

 

 这是一道非常简单的题, 开辟一个数组用双指针或者把两个并在一起用快排都可以很容易解决

时隔一年, 再次看到这题, 我想再原地用双指针解决

一开始的思路是使用双指针,初始时分别指向两个数组的首个元素, 之后如果第二个指针的数字更小, 则交换两个指针指向的元素,再将指针滑动。

动手时发现这种方法不易实现。

换了一个思路, 两个指针从数组末尾往前滑动, 非常漂亮的解决了这题。

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int p1 = m - 1, p2 = n - 1;
        for (int p = nums1.size() - 1; p >= 0; --p)
        {
            if (p1 < 0) { nums1[p] = nums2[p2--];   continue; }
            if (p2 < 0) { nums1[p] = nums1[p1--];   continue; }
            if (nums1[p1] <= nums2[p2]) { nums1[p] = nums2[p2]; --p2; }
            else                        { nums1[p] = nums1[p1]; --p1; }
        }
    }
};

 

posted @ 2022-02-24 23:59  鱼儿冒个泡  阅读(37)  评论(0编辑  收藏  举报