题目描述:
分析:
示例给出的 nums1 = [1,2,3,0,0,0], m = 3 ,m并不等于nums1的长度,nums1的长度为 m+n ,可以先声明一个临时数组temp[m+n] 用来存放最终的结果,然后再复制到 nums1 中,直接上代码:
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] temp = new int[m + n];
int k = 0;
int i = 0;
int j = 0;
for (; i < m;) {
if (j < n && nums2[j] > nums1[i]) {
temp[k++] = nums1[i++];
} else if(j < n && nums2[j] <= nums1[i]){
temp[k++] = nums2[j++];
}else {
break;
}
}
if (i == m && j != n) {
for (; k < m+n; k++)
temp[k] = nums2[j++];
}
if(i != m && j == n) {
for (; k < m+n; k++)
temp[k] = nums1[i++];
}
for (i = 0; i < m + n; i++) {
nums1[i] = temp[i];
}
}