LeetCode

LeetCode 4. 寻找两个有序数组的中位数

2020-03-05  本文已影响0人  桐桑入梦

给定两个大小为 m 和 n 的有序数组 nums1nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))

你可以假设 nums1nums2 不会同时为空。

示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0

示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5


应该可以使用二分法加快速度,这里我是没有使用二分法,而是使用了归并的思路,但是在时间和空间复杂度上都会慢于使用二分的方法

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int[] num = new int[ nums1.length + nums2.length ];
        int p1 = 0, p2 = 0, k = 0;
        while( p1 < nums1.length && p2 < nums2.length ){
            if( nums1[p1] < nums2[p2] )
                num[k++] = nums1[p1++];
            else
                num[k++] = nums2[p2++];
        }
        while( p1 < nums1.length ) 
            num[k++] = nums1[p1++];
        while( p2 < nums2.length )
            num[k++] = nums2[p2++];
        double result = 0;
        int mid = ( nums1.length + nums2.length ) / 2;
        if( ( nums1.length + nums2.length ) % 2 == 0 )    
            result = (double)( num[mid - 1]  + num[mid]) / 2;
        else
            result = num[mid];
        return result;
    }
}
运行结果
上一篇下一篇

猜你喜欢

热点阅读