JAVA
① 调用函数
import java.util.Arrays;
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2, 0, nums1, m, n);
Arrays.sort(nums1);
}
}
System.arraycopy(nums2, x, nums1, y, z)
的含义:
从 nums2 下标为 x 的位置开始复制 z 个元素到 nums1 下标为 y 的位置(将 nums1 原有的元素逐个替换)
② 普通双指针
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1, count = n + m - 1;
while (i >= 0 && j >= 0) { // 注意符合是 >=0
if (nums1[i] < nums2[j]) nums1[count--] = nums2[j--];
else nums1[count--] = nums1[i--];
}
// 因为都是赋值到 nums1,而指针 i本身就在 nums1,因此指针 i不用动
while (j >= 0) nums1[count--] = nums2[j--];
}
}
③ 硬核双指针
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1, count = n + m - 1;
// 考虑到只有指针 j会影响到整体,因此我们只判定 j即可
while (j >= 0)
nums1[count--] = i < 0 ? nums2[j--] : nums1[i] < nums2[j] ? nums2[j--] : nums1[i--];
}
}
Python
① 暴力
class Solution(object):
def merge(self, nums1, m, nums2, n):
nums1[:] = sorted(nums1[:m] + nums2)
② 硬核双指针
class Solution(object):
def merge(self, nums1, m, nums2, n):
count = m+n-1
n, m = n-1, m-1
while n >= 0:
if m < 0:
nums1[count] = nums2[n]
n -= 1
elif nums1[m] > nums2[n]:
nums1[count] = nums1[m]
m -= 1
else:
nums1[count] = nums2[n]
n -= 1
count -= 1