88. Merge Sorted Array

这个题也挺好的。。

三刷感觉很多E的题都非常值得再考虑。

比如这个,虽然题上没说,但是肯定是不能用extra space,估计二刷一刷重新建了ARRAY之类的。。

倒着来就行,利用M和N的已知。

public class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 1 2 3 4 9 15 20 30
        // 6 8  
        
        if (nums2.length == 0) return;
        
        int i = m - 1;
        int j = n - 1;
        while (j >= 0 || i >= 0) {
            if (i >= 0 && j >= 0) {
                if (nums1[i] > nums2[j]) nums1[i + j + 1] = nums1[i--];
                else nums1[i + j + 1] = nums2[j--];
            }
            else if (i < 0) {
                nums1[i + j + 1] = nums2[j--];
            }
            else break;
        }
        return;
        
    }
}

回头看二刷的做法,他妈的。。瞬间打脸。。。。。。。。。。。
二刷的我简直是个天才。当时怎么做出来的。。

public class Solution 
{
    public void merge(int[] nums1, int m, int[] nums2, int n) 
    {
        
        int a = m-1;
        int b = n-1;
        int c = m+n-1;
        while(a >= 0 && b >=0)
        {
            nums1[c--] = nums1[a] > nums2[b] ? nums1[a--]:nums2[b--];
        }
        
        
        while(b >= 0) nums1[c--] = nums2[b--];
        

        
    }
}
posted @ 2016-11-06 06:37  哇呀呀..生气啦~  阅读(61)  评论(0)    收藏  举报