天天看點

高頻刷題-88. Merge Sorted Array

高頻刷題-88. Merge Sorted Array

https://leetcode.com/problems/merge-sorted-array

merge有序數組,由于兩個數組都是有序的,所有隻要按順序比較大小即可。

從 nums1 和 nums2 數組的末尾開始一個一個比較,把較大的數,按順序從後往前加入merge之後的數組末尾。

需要三個變量 i,j,k,分别指向 nums1,nums2,和merge數組的末尾。進行 while 循環,如果i和j都大于0,再看如果 nums1[i] > nums2[j],說明要先把 nums1[i] 加入混合數組的末尾,加入後k和i都要自減1;反之就把 nums2[j] 加入混合數組的末尾,加入後k和j都要自減1。循環結束後,有可能i或者j還大于等于0,若j大于0,那麼還需要繼續循環,将 nums2 中的數字繼續拷入 nums1。若是i大于等于0,那麼就不用管,因為merge

後的數組本身就放在 nums1 中。

public void merge(int[] nums1, int m, int[] nums2, int n) {
        m--; // 數組從0開始,需要-1
        n--;
        int index = nums1.length - 1;   // 最終結果數組的index,從尾開始
        
        while(m >= 0 && n >= 0) {
            if (nums1[m] > nums2[n]) nums1[index--] = nums1[m--]; // 從尾開始,比較最大的值,如果最大,則放到對應的位置
            else nums1[index--] = nums2[n--];
        }
        while (n >=0) nums1[index--] = nums2[n--];  // 最後隻需要考慮n未周遊完,m沒有周遊完不用考慮,因為結果都儲存在nums1中
    }