有序數組 nums1(長度 m+n,前 m 有效)和 nums2(長度 n)。將 nums2 合併到 nums1,要求 O(1) 額外空間。
從後向前填充 nums1:
i = m-1,j = n-1,k = m+n-1nums1[i] 和 nums2[j],較大者放入 nums1[k--]nums2 剩餘,直接拷貝前綴
void merge(vector& nums1, int m, vector& nums2, int n) {
int i = m-1, j = n-1, k = m+n-1;
while (i >= 0 && j >= 0)
nums1[k--] = (nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
while (j >= 0) nums1[k--] = nums2[j--];
}
nums1 尾部空閒空間,避免覆蓋未處理元素