题目
题目大意:将两个有序数组合并为一个,并放到第一个数组内,其中第一个数组已经有足够的空间储存两个数组的值。
从后往前比较。
代码如下:
public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//当第一个数组为空时直接将第二个数组的值复制到第一个数组
if (m == 0) {
for (int i = n-1;i>=0;i--){
nums1[i] = nums2[i];
}
}
else if (m!=0 && n!=0){
int as = m - 1;
int bs = n - 1;
int mns = m + n - 1;
//逆向比较的过程
for (int i = 0; i < m + n; i++) {
if (nums1[as] > nums2[bs]) {
nums1[mns--] = nums1[as];
as--;
} else if (nums1[as] < nums2[bs]) {
nums1[mns--] = nums2[bs];
bs--;
} else {
nums1[mns--] = nums1[as];
nums1[mns--] = nums2[bs];
as--;
bs--;
}
if (as < 0 || bs < 0)
break;
}
//当其中一个数组比较完后,直接将不为空数组的值复制到第一个数组
if (as < 0 && bs >= 0) {
while (bs >= 0) {
nums1[mns--] = nums2[bs];
bs--;
}
} else if (as >= 0 && bs < 0){
while (as >= 0) {
nums1[mns--] = nums1[as];
as--;
}
}
}
}
}