線上推廣方法有哪些長(zhǎng)沙網(wǎng)站seo報(bào)價(jià)
合并兩個(gè)有序數(shù)組
題目:
給你兩個(gè)按 非遞減順序 排列的整數(shù)數(shù)組?nums1
和 nums2
,另有兩個(gè)整數(shù) m
和 n
,分別表示 nums1
和 nums2
中的元素?cái)?shù)目。
請(qǐng)你 合并 nums2
到 nums1
中,使合并后的數(shù)組同樣按 非遞減順序 排列。
注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲(chǔ)在數(shù)組 nums1
中。為了應(yīng)對(duì)這種情況,nums1
的初始長(zhǎng)度為 m + n
,其中前 m
個(gè)元素表示應(yīng)合并的元素,后 n
個(gè)元素為 0
,應(yīng)忽略。nums2
的長(zhǎng)度為 n
。
示例 1:
輸入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 輸出:[1,2,2,3,5,6] 解釋:需要合并 [1,2,3] 和 [2,5,6] 。 合并結(jié)果是 [1,2,2,3,5,6] ,其中斜體加粗標(biāo)注的為 nums1 中的元素。
示例 2:
輸入:nums1 = [1], m = 1, nums2 = [], n = 0 輸出:[1] 解釋:需要合并 [1] 和 [] 。 合并結(jié)果是 [1] 。
提示:
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109
?思路:這個(gè)代碼非常簡(jiǎn)單,核心就在于兩個(gè)步驟。第一步是數(shù)組整合,第二是數(shù)組排序
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {//實(shí)現(xiàn)添加for (int i = m;i<m+n;i++){nums1[i] = nums2[i-m];}// 實(shí)現(xiàn)冒泡排序算法for (int i = 0;i<m+n-1;i++){for (int j =0;j<(m+n-i-1);j++){if (nums1[j]>nums1[j+1]){int temp;temp = nums1[j+1];nums1[j+1] = nums1[j];nums1[j] = temp;}}}}
}
?總結(jié):首先代碼出現(xiàn)的問(wèn)題在于代碼的運(yùn)行時(shí)間太長(zhǎng),解決思路:通過(guò)其他的排序方法。
?比如快速排序等等
?進(jìn)階:你可以設(shè)計(jì)實(shí)現(xiàn)一個(gè)時(shí)間復(fù)雜度為 O(m + n)
的算法解決此問(wèn)題嗎?