給定兩個已排序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使 nums1 成為有序數組。nums1 有足夠空間容納所有元素(大小 ≥ m+n)。
從 nums1 有效部分末尾(m-1)和 nums2 末尾(n-1)開始,比較大小,將較大者放入 nums1 末尾(m+n-1),對應指針前移。這樣避免了數據前移覆蓋問題。
class Solution {
public:
void merge(vector& nums1, int m, vector& nums2, int n) {
int i = m - 1, j = n - 1, k = m + n - 1;
while (j >= 0) {
nums1[k--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
}
}
};