LeetCode88题:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
//
// 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
直接暴力把nums2的元素放到nums1中m后的位置,然后再排序
int second=0;
for(int i=m;i<m+n;i++){
nums1[i]=nums2[second];
second++;
}
Arrays.sort(nums1);
逆序双指针法:
//思路:两个数组是有序的,合成的数据也是有序的,就说明数组的最后一位元素必定是最大的,
// 排序的数中最后的数一定是他们之中最大的,我们就用两个指针指向尾巴,然后比较大小,谁比较大谁就放到数组的最后
int len1=m-1;//指针指向数组有值的最后个元素,nums[m-1]
int len2=n-1;//nunms2[n-1],nums2的最后一个数字
int total=m+n-1;//数组的最后一位
while (len1>=0&&len2>=0){//一直遍历到第一个元素
if(nums1[len1]>=nums2[len2]){//谁大谁放最后
nums1[total--]=nums1[len1--];
}else{
nums1[total--]=nums2[len2--];
}
}
//如果nums2的数比nums1多,就将nums2剩下的元素复制到nums1中,本来就是排序好的,不用再排序
System.arraycopy(nums2, 0, nums1, 0, len2 + 1);