88. Merge Sorted Array - cocoder39/coco39_LC GitHub Wiki
after the first while loop, if nums1_idx >= 0, then no need to merge.
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
nums1_idx, nums2_idx = m-1, n-1
merged_idx = m+n-1
while nums1_idx >= 0 and nums2_idx >= 0:
if nums1[nums1_idx] >= nums2[nums2_idx]:
nums1[merged_idx] = nums1[nums1_idx]
merged_idx -= 1
nums1_idx -= 1
else:
nums1[merged_idx] = nums2[nums2_idx]
merged_idx -= 1
nums2_idx -= 1
# while nums1_idx >= 0:
# just stay where they are
# nums1[merged_idx] = nums1[nums1_idx]
# merged_idx -= 1
# nums1_idx -= 1
while nums2_idx >= 0:
nums1[merged_idx] = nums2[nums2_idx]
merged_idx -= 1
nums2_idx -= 1
===========================
don't miss the 2nd while loop
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1, k = nums1.length - 1;
while (i >= 0 && j >= 0) {
nums1[k--] = nums1[i] >= nums2[j] ? nums1[i--] : nums2[j--];
}
while (j >= 0) {
nums1[k--] = nums2[j--];
}
}