合并兩個有序數組
給你兩個有序整數數組 nums1 和 nums2,請你将 nums2 合并到 nums1 中,使 nums1 成為一個有序數組。
初始化 nums1 和 nums2 的元素數量分别為 m 和 n 。你可以假設 nums1 的空間大小等于 m + n,這樣它就有足夠的空間儲存來自 nums2 的元素。
示例 1:
輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
示例 2:
輸入:nums1 = [1], m = 1, nums2 = [], n = 0
輸出:[1]
問題分析:
對有序數組合并,從後往前依次放入nums1即可。如圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TQiFjRHNmZOhVY5RnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4EDO0EDMwATMzAjMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
若i>=0&&j>=0,此時兩個數組内元素比大小,大的放進去。
若j>=0,即數組nums1走完,此時直接将nums2完全放入nums1。
若i>=0,即數組nums2走完,此時不動,nums1還是nums1。
代碼如下:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i=m-1;
int j=n-1;
int k=m+n-1;
while(i>=0&&j>=0)
nums1[k--]=nums1[i]>nums2[j]?nums1[i--]:nums2[j--];
while(j>=0)
nums1[k--]=nums2[j--];
}
解決方案:
這個做法是從後面開始确定的,還有其他方法可以做,有時間再寫出來。