一、题目描述
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
二、代码演示
//官方答案,自己理解一下,给出详细注释
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//创建一数组,存放nums1和nums2的值
int[] arr = new int[m+n];
//创建arr数组的指针索引
int idx = 0;
//创建i,j指针
for (int i=0, j=0; i<m || j<n;){
//当同时满足i,j指针索引小于数组nums1和nums2的长度时
if(i<m && j<n){
//这里用一个三元表达式,如果nums1[i]<nums2[j]成立,那么将nums1[i++]给arr[idx++]
arr[idx++] = nums1[i]<nums2[j] ? nums1[i++] : nums2[j++];
//当只满足i<m,也就是nums2是空数组,或者已经先遍历完了
}else if(i<m){
arr[idx++] = nums1[i++];
//当只满足j<n,也就是nums1是空数组,或者已经先遍历完了
}else if(j<n){
arr[idx++] = nums2[j++];
}
}
/*实现数组到数组之间的拷贝
System.arraycopy(arr, 0, nums1, 0,m+n)
arr:源数组
0:源数组复制的起始位置
nums1:目标数组
0:目标数组放置的起始位置
m+n:复制的长度
*/
System.arraycopy(arr, 0, nums1, 0, m+n);
}
}