思路一:
先合并成一个数组,再排序,性能很低,属于无脑输出。
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i=m;i<m+n;i++){
nums1[i]=nums2[i-m];
}Arrays.sort(nums1);
}
思路二:把最大的从后开始放,比较1和2两个数组,放了一个,下标移动一次;
最终可能的情况,数组1,没有被放完,因为数组2最小的比数组1大,此时因为原数组1已经排好序,所以自然就是有序的
第二种情况,数组1最小的比数组2大,数组二有部分没有被放进大数组,此时,继续把数组2 的依次放入大数组
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=m-1;
int j=n-1;
int k= m+n-1;
while(j>=0&&i>=0){
if(nums1[i]>nums2[j]){
nums1[k--]=nums1[i--];
}else{
nums1[k--]=nums2[j--];
}
}
while(j>=0){
nums1[k--]=nums2[j--];
}
}