88. Merge Sorted Array 合并有序数组

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.


题目解析:将两个已经排好顺序的数组进行合并,假设第一个数组nums1除了自己数据之外有足够的空间n放置nums2里面的元素,所以将nums2的数据直接放到nums1里面

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int a=m-1;
        int b=n-1;
        int sizeOfNums=n+m-1;
        while(a>=0 && b>=0){//从后往前比较循环遍历,将大的值放到后面
            if(nums1[a]>nums2[b]){
                nums1[sizeOfNums--]=nums1[a--];//先将当前比较数值中的较大值放到nums1最后面,然后再对sizeOfNums和a或b进行减一
            }else{
                nums1[sizeOfNums--]=nums2[b--];
            }
        }
        while(b>=0){//如果能到这一步说明nums1里面的数值全部比较完成,剩下nums2里面的几个数值比nums1里面最小的值还要小
            nums1[sizeOfNums--]=nums2[b--];
        }
        //如果出现nums1里面又剩下的几个数值比nums2里面的所有数值都要小的情况不用管,本来就包含在nums1里面
    }
}
解题思路:
1、由于nums1有足够的空间,将nums2的数据与nums1的数据进行比较直接放入nums1
2、考虑到如果从前面往后面比较放入,那么每插入一个小的数值,nums1后面的数据都需要进行移动。所以从后往前排,从最后一个位置的数据进行融合,即先比较较大值,3、将两个当中的较大值放到nums1的最后一位,将sizeOfSize(即nums1和nums2还有多少待排序融合的位数)向前移动一个位置,进行同样操作,直至处理完成。
考虑到可能某一个数组里面的所有数据都排完了,也就是说nums2里面还有几个数据比原nums1里面的虽小数据还要小的情况,需要将nums2剩下数据插入现在的nums1的前面几位,故再加入一个while语句。对于如果原nums1剩下几位比nums2最小数据还要小的情况不用管,毕竟已经在现在的nums1里面了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值