解法一
思路
直接使用 System.arraycopy() 函式後 sort。
程式碼
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2, 0, nums1, m, n); // nums2: 要 copy 的陣列; 0: 開始 copy 的位置; nums1: copy in 陣列; m: copy in 的位置; n: copy 的個數
Arrays.sort(nums1);
}
}
時間複雜度 O((n+m)log(m+n)),因為自己進行了一次排序。
解法一
思路
利用 sorted array 這個條件。
在兩個陣列最後一個有效值處放置指標 (n-1 和 m-1)並且在 nums1 的末尾放置指標 n + m -1
如果兩個陣列指標都還沒到頭
把 nums1的末尾和 nums2 的末尾值較大的那個放到陣列的末尾。陣列末尾指標前移,較大數所在陣列指標前移。
如果 nums1 指標到頭而 nums2 的還沒到頭
把剩餘的 nums2 元素放進 nums1 中
如果 nums2 到頭而 nums1 還沒到頭
無需進行任何操作因為 nums1 已經排序過了
程式碼
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int l1 = m - 1;
int l2 = n - 1;
int last = n + m - 1;
while (l1 >= 0 && l2 >= 0) {
if (nums1[l1] >= nums2[l2]) {
nums1[last] = nums1[l1];
l1--;
}
else {
nums1[last] = nums2[l2];
l2--;
}
last--;
}
while (l2 >= 0) {
nums1[last--] = nums2[l2--];
}
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結