您的位置:首页 > 其它

Merge Sorted Array合并两个有序数组

2016-01-09 12:00 567 查看
Given two sorted integer arrays nums1 and nums2, merge nums2 intonums1 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 innums1 andnums2 arem and
n respectively.

出处:http://www.programcreek.com/2012/12/leetcode-merge-sorted-array-java/

倒着存入数组nums1,你怎么就没有这个思维呢。真是的。因为nums1后边的空着的啊,所以就倒着装啊,切记切记切记

public class Solution {

    public void merge(int[] nums1, int m, int[] nums2, int n) {

        while(m>0&&n>0){

            if(nums1[m-1]>nums2[n-1]){

                nums1[n+m-1]=nums1[m-1];

                --m;

            }

            else{

                nums1[n+m-1]=nums2[n-1];

                --n;

            }

        }

            while(n>0){

                nums1[n+m-1]=nums2[n-1];

                --n;

            }

    }

}


public class Solution {

    public void merge(int[] nums1, int m, int[] nums2, int n) {

        int i=m-1;

        int j=n-1;

        int k=n+m-1;

        while(k>=0){

            if(j<0 || (i>=0 && nums1[i]>nums2[j]))  nums1[k--]=nums1[i--];

            else nums1[k--]=nums2[j--];  //这种j--的写法很不错

        }

    }

}


上边两种写法的结合

    public class Solution {  

        public void merge(int A[], int m, int B[], int n) {

            int i=m-1;  

            int j=n-1;  

            int k=m+n-1;  

              

            while(i>=0 && j>=0)  A[k--] = A[i] > B[j] ? A[i--] : B[j--];

              

            while(j>=0)  A[k--] = B[j--];

        }  

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: