合併兩個有序陣列

2021-10-02 08:35:07 字數 1735 閱讀 1834

給定兩個有序整數陣列 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]

方法一:合併後,七大排序

這個方法有點生硬,我將nums2陣列拷貝到nums1後面,然後得到乙個無順序的陣列,這個時候我們學過的七大排序就派上用場了,這裡我採用插入排序為例子

class

solution

for(

int i =

0; i < nums2.length; i++

)insertsort

(nums1,m + n);}

public

void

insertsort

(int

array,

int length)

else

} array[cur +1]

= tmp;}}

}

時間複雜度:o(n^2)

空間複雜度:o(1)

我寫過的關於七大排序的部落格:

方法二:合併後排序

看到了力扣的官方解答,這也太簡潔了吧

arraycopy(object src, int srcpos, object dest, int destpos, int length)

copies an array from the specified source array, beginning at the specified position, to the specified position of the destination array.

意思是,將src陣列拷貝到dest目標陣列,從0(srcpos)開始拷貝,拷貝到目標陣列從m(destpos)開始拷貝,拷n這麼長

public

void

merge

(int

nums1,

int m,

int[

] nums2,

int n)

時間複雜度 : o((n+m)log(n+m))。

空間複雜度 : o(1)。

方法三:雙指標法

這個方法有點類似合併兩個有序鍊錶

也是用兩個指標,乙個指向nums1(copy),乙個指向nums2,比較大小然後放入nums1中

具體實現**如下:

public

void

merge

(int

nums1,

int m,

int[

] nums2,

int n)

if(p1 < m)

system.

arraycopy

(nums1copy, p1, nums1, p, m - p1);if

(p2 < n)

system.

arraycopy

(nums2, p2, nums1, p ,n - p2)

;}

合併兩個有序陣列

例如 陣列a1 陣列a2 則合併為a3 思路 依次掃瞄a1和a2的元素 比較當前元素的值,將較小的元素賦給a3,直到乙個陣列掃瞄完畢,然後將另乙個陣列的剩餘元素賦給a3即可。陣列a3的容量需要容納a1和a2兩個陣列和長度和。實現 include include void merge int a1,i...

合併兩個有序陣列

給定兩個有序整數陣列 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 class solution def merge s...

合併兩個有序陣列

題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素...