题目一
思路分析
因为是非递减数组,所以使用指针,从结尾开始判断
len1指向数组1的有效数字末尾,len2指向数组2的末尾,len指向数组1的末尾,
移动指针,比较数组1【len1】与数组2【len2】的大小,将其添加到数组1【len】中
直到数组1的数据遍历完,然后将剩余的数组2的数据全部拷贝到数组1
代码实现
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//指向数组1的有效数字末尾
int len1=m-1;
//指向数组2的末尾
int len2=n-1;
//指向数组1的末尾
int len=m+n-1;
//遍历比较大小
while(len1>=0&&len2>=0){
//判断当前指针所在位置nums1[len1]和nums2[len2]的大小,并复制给nums的末尾
nums1[len--]=nums1[len1]>nums2[len2]?nums1[len1--]:nums2[len2--];
}
//nums的数据遍历完后,将nums2的数据全部拷贝到nums1
System.arraycopy(nums2,0,nums1,0,len2+1);
}
}
System.arraycopy使用的基本定义
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
- src:原数组
- srcPos:原数组要复制的起始位置
- dest:目标数组
- destPos:目标数组放置的起始位置
- length:复制的长度