1. 程式人生 > >88.merge-sorted-array

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