LeetCode—— Median of Two Sorted Arrays

Description:

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

思路:找出两个已经排好序数组的中位数。可以使用合并排序中的merge,然后直接找出中位数就能AC。时间复杂度为O(m+n)。但是!!这毕竟是一个Hard的题!时间复杂度要求O(log(m+n))!

先上merge代码:

public class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        
        int m = 0, n = 0;
        
        if(nums1 != null) {
            m = nums1.length;
        }
        if(nums2 != null) {
            n = nums2.length;
        }
        int[] res = new int[m + n];
        //merge
        int cur = 0, i = 0, j = 0;
        while(i<m && j<n) {
            if(nums1[i] < nums2[j]) {
                res[cur] = nums1[i];
                i ++;
            }
            else {
                res[cur] = nums2[j];
                j ++;
            }
            cur ++;
        }
        
        while(i < m) {
            res[cur] = nums1[i];
            i ++;
        }
            cur ++;
        
        while(j < n) {
            res[cur] = nums2[j];
            j ++;
            cur ++;
        }
        
        //findMedian
        int length = m + n;
        double ans = 0.0;
        //
        if((length & 1) != 0) {
            ans = res[length / 2];
        }
        else {
            ans = (double)(res[length/2 - 1] + res[length/2]) / 2.0;
        }
        
        return ans;
    }
}

严重怀疑Java的测试数据和C/C++的不一样。要不效率会这么高!

O(log(m+n))的二分代码网上都是一样的,就不贴了。

http://blog.csdn.net/zxzxy1988/article/details/8587244

 

posted @ 2015-11-10 16:06  Pickle  阅读(234)  评论(0编辑  收藏  举报