88. Merge Sorted Array 合并有序数组

来源:互联网 发布:矩阵乘法怎么算 编辑:程序博客网 时间:2024/05/17 23:32

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 tom + n) to hold additional elements fromnums2. 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
原创粉丝点击