The description should tell us that all the elements in nums1 stored at 0 ~ m.

It takes me some time to realize that, otherwise we don't know where are the elements in nums1.

Here is my solution:

public void merge(int[] nums1, int m, int[] nums2, int n) {

int i = m - 1;

int j = n - 1;

int index = m + n - 1;

while (i >= 0 && j >= 0) {

if (nums1[i] > nums2[j]) {

nums1[index--] = nums1[i--];

} else {

nums1[index--] = nums2[j--];

}

}

while (i >= 0) nums1[index--] = nums1[i--];

while (j >= 0) nums1[index--] = nums2[j--];

}