[LeetCode] #88 Merge Sorted Array 解題

題目連結

題型解說

這是一題難度為簡單的題目

需要設計一個方法,此方法會傳入兩個已排序的整數陣列 nums1 nums2 及它們各自的長度 m 與 n

將 nums2 的元素合併到 nums1 後進行排序即可

另 nums1 有保留給 nums2 的欄位,所以不需要另外產生新的陣列

範例:

nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3,則回傳 [1,2,2,3,5,6]

m 為 nums1 的元素數量,n 為 nums2 的元素數量

但 nums1 的真實長度是 m + n,多出來的部分是為了給 nums2 合併用的

解題思路

利用一個迴圈,從各自的元素中取最後一個比大小,比較大的那個元素就放到 nums1 的最後位置

再把各自的索引減去 1

程式碼

Java

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int last = m + n -1; // m + n 同等於 nums1.length
        m--; // 直接使用原本的變數,就不宣告新的
        n--; // 直接使用原本的變數,就不宣告新的
        
        // 因為題目是要求將 nums2 合併到 nums1,所以必須跑到 nums2 清空為止
        while (n > -1) {
            if (m > -1 && nums1[m] > nums2[n]) {
                nums1[last--] = nums1[m--];
            } else {
                nums1[last--] = nums2[n--];
            }
        }
    }
}