Leetcode序号88



示例一:
通过java自带工具类
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for (int i = 0; i < n; i++) {
nums1[m + i] = nums2[i];
}
Arrays.sort(nums1);
}
}Arrays.sort()底层使用快排,速度可观。

示例二:
这里通过创建第三个数组array,nums1和nums2比较,谁小,将其值赋予array,同时索引加一
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] array = new int[m + n];
int index1 = 0;
int index2 = 0;
for (int i = 0; i < m + n; i++) {
if (index1 >= m) {
array[i] = nums2[index2];
index2++;
continue;
}
if (index2 >= n) {
array[i] = nums1[index1];
index1++;
continue;
}
if (nums1[index1] <= nums2[index2]) {
array[i] = nums1[index1];
index1++;
} else {
array[i] = nums2[index2];
index2++;
}
}
for (int i = 0; i < m + n; i++) {
nums1[i] = array[i];
}
}
}
示例三:
对示例二的优化,不借助第三个数组,通过nums1和nums2比较,谁大,将其值赋予nums1有效值最大索引,同时索引减一。
这里主要的难度就是长度临界值的判断了

class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index1 = m - 1;
int index2 = n - 1;
for (int i = m + n - 1; i >= 0; i--) {
if (index1 < 0) {
nums1[i] = nums2[index2];
index2--;
} else if (index2 < 0) {
break;
} else if (nums1[index1] >= nums2[index2]) {
nums1[i] = nums1[index1];
index1--;
} else {
nums1[i] = nums2[index2];
index2--;
}
}
}
}

