# 合并两个有序数组
# 思路:双指针排序。
public void merge(int[] nums1, int m, int[] nums2, int n) {
int l = 0, r = 0, len = 0;
int[] nums = new int[m + n];
System.arraycopy(nums1, 0, nums, 0, m);
while (l < m && r < n) {
nums1[len++] = (nums[l] < nums2[r]) ? nums[l++] : nums2[r++];
}
if (l < m) {
while (l < m) {
nums1[r+l] = nums[l++];
}
}
if (r < n) {
while (r < n) {
nums1[l+r] = nums2[r++];
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 思路: 合并数组,再排序。
public void merge(int[] nums1, int m, int[] nums2, int n) {
int l = 0;
while (l < n) {
nums1[m + l] = nums2[l++];
}
for (int i = 0; i < m + n; i++) {
for (int j = i; j < m + n; j++) {
if (nums1[i] > nums1[j]) {
int tem = nums1[i];
nums1[i] = nums1[j];
nums1[j] = tem;
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2, 0, nums1, m, n);
Arrays.sort(nums1);
}
1
2
3
4
2
3
4