88.merge-sorted-array
阿新 • • 發佈:2018-11-07
這道題目被噴的很慘,而且難度極低,基本上是個人都能做出來,但是我要說的是,一個細節的處理很重要,個人感覺是能反映出一些靈活運用的能力。
題目大體意思是這樣的,給定兩個從小到大的排序陣列,將兩個陣列歸併排序到第一數組裡面去,第一個陣列中前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--]; } } };