1. 程式人生 > 實用技巧 >88. 合併兩個有序陣列

88. 合併兩個有序陣列

給你兩個有序整數陣列nums1 和 nums2,請你將 nums2 合併到nums1中,使 nums1 成為一個有序陣列。

說明:

  • 初始化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]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/merge-sorted-array

思路:

那麼OK,既然nums1陣列有足夠大的容量,來定義兩個指標嘍,其實是三個要定義的,物件也不一樣,這次兩個指標不再指向一個數組的頭和尾,而是要指向不同的陣列了。

定義三個指標,第一個指向nums1的尾,第二個指向nums2的尾巴,那麼第三個呢?

第三個指標指向擴增後的nums1的尾巴,其實就是n+m-1的位置

然後遍歷到的數進行比較,根據大小,大的先新增到擴增陣列的尾部,依次向前。

老師老師,為什麼要從後往前呢,我從前往後先填小的數不行嗎?

廢話,當然不行,不然我後往前幹嘛0.0 從前開始會改變nums1陣列原來的數,後面開始都是0也就無所謂了,大家自己去試試就知道了。

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1
; int j = n - 1; int all = m + n - 1; while(i >= 0 || j >= 0){ if(i < 0 ){ nums1[all--] = nums2[j--]; }else if(j < 0){ nums1[all--] = nums1[i--]; }else if(nums2[j] > nums1[i]){ nums1[all
--] = nums2[j--]; }else{ nums1[all--] = nums1[i--]; } } } }