题目链接:88. 合并两个有序数组 - 力扣(LeetCode)
本题思路就是将nums1数组中的有效数字(除去最后nums2长度的0)存入list中,再将nums2中的数字存入list,最后将list转换回数组放入nums1。
原本应用了System.arrayCopy()方法,是不需要进行数据类型转换的,但不知是什么原因,样例不能全部通过。
原System.arraycopy()方法,不知道是哪的问题就放出来提供一个参考。
public static int[] merge(int[] nums1, int m, int[] nums2, int n) {
if (n >= 0&& m>0) System.arraycopy(nums2, 0, nums1, n, n);
if (m==0){
System.arraycopy(nums2,0,nums1,0,n);
}
Arrays.sort(nums1);
return nums1;
}
正确题解:
public static int[] merge(int[] nums1, int m, int[] nums2, int n) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < m ; i++) {
list.add(nums1[i]);
}
for (int i : nums2) {
list.add(i);
}
for (int i = 0; i < nums1.length; i++) {
nums1[i] = list.get(i);
}
Arrays.sort(nums1);
return nums1;
}
测试样例为:
int[] nums1 = new int[]{-1, 0, 0, 3, 3, 3, 0, 0, 0};
int[] nums2 = new int[]{1, 2, 2};
此时,m=6,n=3。
运行结果:
-1 0 0 1 2 2 3 3 3
Process finished with exit code 0