88.merge-sorted-array

       这道题目被喷的很惨,而且难度极低,基本上是个人都能做出来,但是我要说的是,一个细节的处理很重要,个人感觉是能反映出一些灵活运用的能力。

       题目大体意思是这样的,给定两个从小到大的排序数组,将两个数组归并排序到第一数组里面去,第一个数组中前m个是待排元素,后n个为位置是任意数字,目的是能够放下两个数组。

      这道题用常规的归并排序完全可以做,但是,既然题目专门将一个数组的大小扩充了,意味着作者并不像让我们重新申请空间,因此,根据题目我们可以从后往前做归并。这思路不难,但是有时候对于我们这样的新手可能不是那么容易想到。

具体的代码如下:

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

猜你喜欢

转载自blog.csdn.net/qq_29592167/article/details/83178495