Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
描述
给出两个有序的整型数组,要求将这两个数组合并到 nums1
中
分析
采用归并排序的思想,进行合并。因为数组的大小已知,采用从后往前进行合并,可以不需要额外的空间
代码
需要额外空间:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] newArray = new int[m + n];
int i, j, k;
i = j = k = 0;
while (i < m && j < n) {
if (nums1[i] < nums2[j]) {
newArray[k++] = nums1[i++];
} else {
newArray[k++] = nums2[j++];
}
}
while (i < m) {
newArray[k++] = nums1[i++];
}
while (j < n) {
newArray[k++] = nums2[j++];
}
for (i = 0; i < n + m; i++) {
nums1[i] = newArray[i];
}
}
}
不需要额外空间:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int len = m + n - 1;
m--;
n--;
while (m >= 0 && n >= 0) {
if (nums1[m] > nums2[n]) {
nums1[len--] = nums1[m--];
} else {
nums1[len--] = nums2[n--];
}
}
// 因为是合并到 nums1
// 所以在 m >= 0 的情况下,此时数组已经完成合并,不需要操作
// 因此只需处理 n >= 0 的情况
for (int i = 0; i <= n; i++) {
nums1[i] = nums2[i];
}
}
}