合併兩個有序的陣列

2022-07-31 17:36:12 字數 2345 閱讀 1550

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。

說明:初始化 nums1 和 nums2 的元素數量分別為 m 和 n。

你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nums2 中的元素。

示例:輸入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6], n = 3

輸出: [1,2,2,3,5,6]

看到此題我們能想到的思路有兩種:

1.因為nums1有足夠的空間,所以直接將nums2放入nums1然後再進行排序。

**如下:

方法一:

1

void merge(int nums1, int m, int nums2, int

n) 7

8intk;9

intl;

10int

tmp;

11for(k=0;k//

氣泡排序

12for(l=k+1;l)

13if(nums1[k]>nums1[l])18}

22 }

23 public static void main(string args)

36    }

方法二:

1

public

static

void merge(int nums1, int m, int nums2, int

n)

8 m++; //

移向nums1的下乙個元素

9for(int k = m - 1;k > j;k--)

12 nums1[j] = tem; //

nums2放入當前找到的位子

13} 14}

1516

public

static

void

main(string args) ;

18int nums2 = ;

1920 merge(nums1,3,nums2,3);

21for(int k = 0;k < nums1.length;k++)

2425 }

結果如下:從上面的**中我們可以看到先將nums2放入nums2,然後再排序。方法一相當與用了兩次雙重迴圈,時間複雜度是否優點大呢??而且這樣是否浪費了題意呢??那再讀一遍題:給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。有沒有更好一點解決辦法呢?當然有:

2.我們先申請乙個有m+n 大的陣列,將nums1和nums2同時往新的陣列裡面放,因為他們都是有序的,所以就判斷然後加就好了,這樣就會避免雙重迴圈給的複雜度太高,而且不「浪費題意」。我們看**。

**如下:

方法三:

1

void merge(int nums1, int m, int nums2, int

n) 13

if ( i < m)

17if (j < n)

21 system.arraycopy(nums,0,nums1,0,nums.length - n); //

給nums1賦去

22     }

23   public static void main(string args) ;

25        int nums2 = ;

26      

27        merge(nums1,3,nums2,3);

28        for(int k = 0;k < nums1.length;k++)

31  }

結果如下:

從上面的**中,我們可以看到它很巧妙的用到了nums1和nums2是有序的條件。而且最後也將最終的新的陣列nums賦給了nums1也是實現了假定nums1有m+n大的空間,可以合併nums1和nums2了。

合併兩個有序陣列

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

合併兩個有序子陣列

設子陣列a 0 k 1 和a k,n 1 已經排好序 0 k n 1 設計乙個合併這兩個子陣列的排序好的陣列a 0 n 1 的 演算法。要求演算法最壞情況下所用的計算時間為o n 且只用到o 1 的輔助空間。解答此題可以用向右 左 迴圈換位合併的思想,先用二分搜尋查詢a 0 在陣列a k n 1 中...

合併兩個有序陣列

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