class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1, p2 = n - 1, p = m + n - 1;;
while(p1 >= 0 && p2 >= 0) {
if(nums1[p1] >= nums2[p2]) {
nums1[p] = nums1[p1];
p1 --;
} else {
nums1[p] = nums2[p2];
p2 --;
}
p --;
}
while(p2 >= 0) {
nums1[p] = nums2[p2];
p2 --;
p --;
}
}
}
// python
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None
# merge from end to beginning
i = m-1
j = n-1
p = m+n-1
while i >= 0 and j >= 0:
if nums1[i] > nums2[j]:
nums1[p] = nums1[i]
i = i-1
else:
nums1[p] = nums2[j]
j = j-1
p = p-1
# only care when nums2 still has waiting elements
if i < 0:
for x in range(0, j+1):
nums1[x] = nums2[x]