給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列
輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
-10^9 <= nums1[i], nums2[i] <= 10^9
nums1.length == m + n
nums2.length == n
兩個陣列分別有序,且最終要輸出的是陣列一解法如下
將陣列nums2中的元素全部新增到nums1中,對nums1做排序
nums1 的剩餘空間剛好可以存放nums2的元素
nums1和nums2都是有序的。
已知兩個陣列的元素個數
通過分析一直條件我們可以發現,nums1存在一定的後置空間,因此我們可以考慮通過對兩個陣列的末位元素進行對比,然後從後往前插入到nums1中的方法。
所以我們可以用三個指標p0,p1,p2來遍歷陣列:
p0:記錄nums1的新元素位置
p1:記錄nums1原陣列的元素位置
p2:記錄nums2原陣列的元素位置
設定遍歷條件 (p1 >= 0 && p2 >= 0)
比較指標指向的元素大小,將較大的元素放入指標p0的位置,同時移動p0和較大元素的指標。
當遍歷條件為 false時 存在三種情況
p1 == 0 p2 ==0 陣列都遍歷完了
p1 == 0 p2 > 0 nums2沒有遍歷完
p1 > 0 p2 ==0 nums1沒有遍歷完
當結果出現1和3時,nums1恰好是合併排序的最終結果
當出現結果2時,說明nums2中還有剩餘元素,所以繼續移動指標p1,將nums2剩餘元素插入到nums1中就行
public void merge(int nums1, int m, int nums2, int n) else
p0--;
}// 處理 nums2 沒有遍歷完的情況
while (p2 >= 0)
}
o(n + m)
o(1)
兩個陣列合併
好久沒寫c c 程式了,手腦都遲鈍了老些,希望自己能夠通過沒日一小題來提高自己,鍛鍊自己。今日題目是,兩個已經排好序的陣列,合併他們並使他們也排好序 程式如下 希望高手們來指教。int mergearray int a,int len1,int b,int len2 while i len1 els...
把兩個陣列合併
將兩個整型公升序資料集合a和b合併成乙個公升序資料集合 例a b 結果 c include define m 7 define n 5 主函式 int main void int b n int c m n merge a,b,c for int i 0 i m n i return 0 方法一 v...
合併兩個陣列
include using namespace std int sortedinsert int a,int lena,int b,int lenb else printf d n a indexnew printf here lena d,lenb d n indexa,indexb indexn...