Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.


題目標籤:Array

  題目給了我們兩個有序陣列,讓我們merge sort,而且nums1 有足夠的空間讓我們存放 兩個array。既然是要放到nums1裡,那麼我們如果比較nums1 和nums2 的數字,如果是nums2 的數字小的話,就要把nums2 的數字存放進nums1,我們還要另外存放nums1的數字,這樣就需要額外space了。所以,我們可以從nums1的end 開始遍歷回start, 然後設兩個pointers 分別指向 兩個array的最後一個數字,這樣可以比完大小後直接存放進nums1。注意最後還需要檢查一下,nums2是否還有剩下的數字,有的話都需要存進nums1。

Java Solution:

Runtime beats 38.77%

完成日期:04/05/2017

關鍵詞:Array

關鍵點:Merge sort;Two Pointers;從end遍歷回start

 public class Solution
{
public void merge(int[] nums1, int m, int[] nums2, int n)
{
/* if m = 0, meaning nums1's elements are all done. Need one more while loop after this
to take care of left elements of nums2.
if n = 0, meaning nums2's elements are done, the rest of nums1's elements are in the
right place. No need to take care of them.
*/
while(m > 0 && n >0)
{
if(nums1[m-1] > nums2[n-1]) // if number 1 > number 2
{
// save nums1's element into nums1's last "empty" spot.
nums1[m+n-1] = nums1[m-1];
m--;
}
else // if number 1 <= number 2
{
// save nums2's element into nums1's last "empty" spot
nums1[m+n-1] = nums2[n-1];
n--;
}
} // check if nums2's elements are not finished.
while(n > 0)
{
// save nums2's rest elements into nums1
nums1[m+n-1] = nums2[n-1];
n--;
}
}
}

參考資料:

http://www.cnblogs.com/springfor/p/3872640.html

LeetCode 演算法題目列表 - LeetCode Algorithms Questions List