Use three pointers starting from the back of nums1. Compare elements from nums1 and nums2 from right to left, placing the larger element at the back.
class Solution:
def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -> None:
last = m + n - 1
while m > 0 and n > 0:
if nums1[m - 1] > nums2[n - 1]:
nums1[last] = nums1[m - 1]
m -= 1
else:
nums1[last] = nums2[n - 1]
n -= 1
last -= 1
while n > 0:
nums1[last] = nums2[n - 1]
n, last = n - 1, last - 1
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1, k = m + n - 1;
while (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) {
nums1[k--] = nums1[i--];
} else {
nums1[k--] = nums2[j--];
}
}
while (j >= 0) {
nums1[k--] = nums2[j--];
}
}
}