88. Merge Sorted Array - cocoder39/coco39_LC GitHub Wiki

88. Merge Sorted Array

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--];
        }
    }