解法1
将nums2拷贝到nums1中,然后进行非递减顺序sort。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for (int i = 0; i < n; i++) {
nums1[i + m] = nums2[i];
}
Arrays.sort(nums1);
}
}
解法2
从左到右,非递减排序。可以理解成:从右到左,非递增排序。
并且,右侧有空白空间,排序位置既是最终位置。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1, k = nums1.length - 1;
while (i > -1 && j > -1) {
if (nums1[i] > nums2[j]) {
nums1[k--] = nums1[i--];
} else {
nums1[k--] = nums2[j--];
}
}
while (i > -1) {
nums1[k--] = nums1[i--];
}
while (j > -1) {
nums1[k--] = nums2[j--];
}
}
}
解法3
1、创建新临时数组
2、双指针合并数组到临时数组中
3、将排序后数组拷贝回nums1
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] sorted = new int[nums1.length];
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (nums1[i] > nums2[j]) {
sorted[k++] = nums2[j++];
} else {
sorted[k++] = nums1[i++];
}
}
while (i < m) {
sorted[k++] = nums1[i++];
}
while (j < n) {
sorted[k++] = nums2[j++];
}
for (i = 0; i < nums1.length; i++) {
nums1[i] = sorted[i];
}
}
}