class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {// nums后面是空的,可以使用逆向双指针。// m-=1,n-=1表示一开始的下标// 存在当nums1[]前m个数为0的情况,所以可以是负数。n也如此。int k = m + n - 1;m -= 1;n -= 1;// 只要有一方没结束,那就继续。while (m >= 0 || n >= 0) {int cur = 0;// 因为可能为负,先处理一下if (m == -1) {cur = nums2[n--];} else if (n == -1) {// 这种情况是因为num2加入完毕之后,剩余的num1本来就是排好序的break;} else if (nums1[m] >= nums2[n]) {cur = nums1[m--];} else {cur = nums2[n--];}nums1[k--] = cur;}}}
