/**88. Merge Sorted Array
* @param nums1
* @param m
* @param nums2
* @param n
* 两个有序数组,合并
*/
public void merge(
int[] nums1,
int m,
int[] nums2,
int n) {
int x=m-
1, y=n-
1;
for (
int i=m+n-
1; i>=
0; i--) {
if (x>=
0 && y>=
0) {
if (nums1[x] > nums2[y]) {
nums1[i] = nums1[x];
x--;
}
else{
nums1[i] = nums2[y];
y--;
}
}
else if (x>=
0) {
nums1[i] = nums1[x];
x--;
}
else {
nums1[i] = nums2[y];
y--;
}
}
}
//从后往前比较,直接定位 从后往前合并,不用移动数组
改进,减少逻辑判断
public void merge1(
int[] nums1,
int m,
int[] nums2,
int n) {
int i = m-
1;
int j = n-
1;
int index = m+n-
1;
while(i >=
0 && j >=
0){
if(nums1[i] > nums2[j])
nums1[
index--] = nums1[i--];
else
nums1[
index--] = nums2[j--];
}
while(i >=
0) nums1[
index--] = nums1[i--];
while(j >=
0) nums1[
index--] = nums2[j--];
}
转载请注明原文地址: https://ju.6miu.com/read-13075.html