题目
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
分析
合并两个数组的方法:
System.arraycopy(src, srcPos, dest, destPos, length);
src: 源数组
srcPos: 源数组的起始位置
dest: 目标数组
destPos: 目标数组的起始位置
length: 要复制的数组元素的个数(长度)
该方法用于从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于 length 参数。源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 destPos+length-1 位置。
如果参数 src 和 dest 引用相同的数组对象,则复制的执行过程就好像首先将 srcPos 到 srcPos+length-1 位置的组件复制到一个带有 length 组件的临时数组,然后再将此临时数组的内容复制到目标数组的 destPos 到 destPos+length-1 位置一样。
数组排序的方法:
Arrays.sort(a);
a: 待排序的数组
使用此方法要导入包: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.out.print("[");
for(int i = 0; i < nums1.length-1; i++) {
System.out.print(nums1[i] + ",");
}
System.out.printf(nums1[nums1.length-1] + "]");
}
}