4. 两个排序数组的中位数-LeetCode

2018-07-22  本文已影响0人  0Xday

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。

请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。


示例 1:

nums1 = [1, 3]
nums2 = [2]

中位数是 2.0


示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

中位数是 (2 + 3)/2 = 2.5


思路:两个数组已排序好,故将其合并为一个数组,再按中位数的数学定义得出答案


解决代码:

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int nums1_len=nums1.length;
        int nums2_len=nums2.length;
        //返回的结果result
        double result=0;
        int [] nums=new int[nums1_len+nums2_len];
        int i=0,j=0,k=0;
        //往数组按元素大小插入
        while(i<nums1_len && j<nums2_len) {
            if(nums1[i]<nums2[j]) {
                nums[k++]=nums1[i++];
            }else {
                nums[k++]=nums2[j++];
            }
        }
        //如果num2的元素未完全插入且num1已插入完全
        while(i==nums1_len && j<nums2_len) {
            nums[k++]=nums2[j++];
        }
        //如果num1的元素未完全插入且num2已插入完全
        while(i<nums1_len && j==nums2_len) {
            nums[k++]=nums1[i++];
        }
        //判断nums元素个数
        if(nums.length%2==0) {
            //偶数:  [nums(len/2-1)+nums[(len/2)]/2
            result=(double)(nums[nums.length/2-1]+nums[nums.length/2])/2;
        }else {
            //奇数:  [nums(len/2-1)/2]
            result=(double)nums[(nums.length-1)/2];
        }
        return result;
    }

上一篇下一篇

猜你喜欢

热点阅读