88. 合并两个有序数组
思路:倒过来考虑。
- 如果nums1最后一个元素最大,则将它的元素移动到最后一个位置,此时nums1中0的数目不变。
- 反之,将nums2的最后一个元素和nums1中的一个0交换。
class Solution {
// 倒过来,谁大就放谁
public void merge(int[] nums1, int m, int[] nums2, int n) {
int cp = n;
int last = nums1.length-1;
int tmp;
m--;
n--;
// 目的:把所有的nums2都过一遍
while(n>=0){
// 如果nums1还没走完,且1中的最后一个元素要更大一些,则将它移动到nums1的最后
while(m>=0 && nums1[m]>nums2[n]){
tmp = nums1[last];
nums1[last] = nums1[m];
nums1[m] = tmp;
last--;
m--;
}
// nums1[]<nums2[]
// 将nums1的移动到nums2里面
tmp = nums1[last];
nums1[last] =nums2[n];
nums2[n] = tmp;
last--;
n--;
}
}
}