寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

暴力解法:

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;
        int[] sum = new int[len1+len2];
        if(len1==0&&len2==1) return nums2[0];   //排除特殊情况
        if(len2==0&&len1==1) return nums1[0];
        int num1=0,num2=0;
        int count = 0;
        while(count<len1+len2){     //合并两个数组
        	if(num1==len1) {
        		while(num2<len2) {
        			sum[count]=nums2[num2];
        			num2++;
        			count++;
        		}
        		break;
        	}
        	if(num2==len2) {
        		while(num1<len1) {
        			sum[count]=nums1[num1];
        			num1++;
        			count++;
        		}
        		break;
        	}
            if(nums1[num1]<nums2[num2]){
                sum[count] = nums1[num1];
                num1++;
            }
            else{
                sum[count] = nums2[num2];
                num2++;
            }
            count++;
        }
        //两种情况进行返回值
        if((len1+len2)%2==0)return (sum[(len1+len2)/2]+sum[(len1+len2)/2-1])/2.00000;
        return sum[(len1+len2)/2];
    }
}
posted @ 2022-05-29 22:39  网抑云黑胶SVIP用户  阅读(20)  评论(0编辑  收藏  举报