題型解說
這是一題難度為簡單的題目
需要設計一個方法,此方法會傳入兩個已排序的整數陣列 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--];
}
}
}
}