2016年2月14日 星期日

LEET code -- 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.






 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void merge(int* nums1, int m, int* nums2, int n) {
    int n1=0,n2=0;
    int ans[m+n+1];
    for(int i =0;i<(m+n);i++){
        if(n1>=m)ans[i]=nums2[n2++];
        else if(n2>=n)ans[i]=nums1[n1++];
        else ans[i]= nums1[n1]<=nums2[n2]? nums1[n1++]:nums2[n2++];
    }
    memcpy(nums1,ans,sizeof(int)*(m+n));
}
------------
不用額外空間  利用nums1後面的多餘空間來放大的數字


1
2
3
4
5
6
7
8
9
void merge(int* nums1, int m, int* nums2, int n) {
    int n1=m-1,n2=n-1;
    for(int i =(m+n-1);i>=0;i--){
        if(n1<0)nums1[i]=nums2[n2--];
        else if(n2<0)nums1[i]=nums1[n1--];
        else nums1[i]= nums1[n1]>=nums2[n2]? nums1[n1--]:nums2[n2--];
        //nums1[i]= n1>=0 && nums1[n1]>= nums2[n2]? nums1[n1--]:nums2[n2--];
    }
}

沒有留言:

張貼留言