、將給定陣列(都有序) nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。
說明:
輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
輸出:[1,2,2,3,5,6]
雙指標 / 從前往後,開闢另外乙個輔助陣列。
一般而言,對於有序陣列可以通過 雙指標法 達到o(n+m)
的時間複雜度。
指標p1—>nums1, 指標p2—>nums2。
在每一步中將比較得出的minone放入輸出陣列中。
由nums1是用於輸出的陣列,需將nums1中的前m個元素放在其他地方。
使 while 退出的原因有二:p1 或 p2 到了陣列的末尾的後一位。
public
void
merge
(int
nums1,
int m,
int[
] nums2,
int n)
// 3.1 p2 到了陣列末尾後一位
if(p0 < m)
// 3.2 p0 到了陣列末尾的後一位
if(p2 < n)
}
前提:只適用於nums1.length = nums2.length + 陣列1實際元素長度。雙指標 / 從後往前
《005 刪除排序陣列中的重複項 ii》— 【雙指標】
《007 驗證回文串》— 【雙指標】
合併兩個有序陣列 c
題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3輸出 1,2,2,3,5,6 思路1 建立乙個新的向量陣列,很常規的乙個思...
合併兩個有序陣列C
題目描述 有兩個排序的陣列a1和a2,內存在a1的末尾有足夠的空餘空間容納a2。請實現乙個函式,把a2中的所有數字插入到a1中,並且所有的數字是排序的。思路分析 從尾到頭邊比較,邊移入正確的位置,時間複雜度為o n include using namespace std void combin2ar...
合併兩個有序陣列(C )
合併兩個有序陣列 思路兩個陣列都非空 記兩個陣列分別為v1,v2,合併後的陣列為vc,設定兩個指標i j分別指向陣列v1,v2,令i j 0,若v1 i v2 j 則可以一直新增v1的元素到合併後的陣列vc直到條件不滿足,同時修改i 新增v2的元素到vc 如果乙個陣列被遍歷完,則應該終止 新增未遍歷...