public double findMedianSortedArrays(int[] nums1, int[] nums2) { if(nums1.length > nums2.length){ return findMedianSortedArrays(nums2, nums1); } int cut1=0; int cut2=0; int len = nums1.length+nums2.length; int cutL = 0; int cutR = nums1.length; while(cut1 <= nums1.length){ cut1 = (cutR-cutL)/2 + cutL; cut2 = len/2 - cut1; double left1 = (cut1==0)?Integer.MIN_VALUE:nums1[cut1-1]; double left2 = (cut2==0)?Integer.MIN_VALUE:nums2[cut2-1]; double right1 = (cut1==nums1.length)?Integer.MAX_VALUE:nums1[cut1]; double right2 = (cut2==nums2.length)?Integer.MAX_VALUE:nums2[cut2]; if(left1 > right2){ cutR = cut1 -1; }else if(left2 > right1){ cutL = cut1+1; }else{ if(len % 2 == 0){ left1 = left1 > left2 ? left1:left2; right1 = right1 > right2 ? right2 : right1; return ( left1 + right1 )/2; }else{ right1 = (right1 > right2 ? right2 : right1); return right1; } } } return -1; }
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。
猜你喜欢
转载自www.cnblogs.com/q-1993/p/10761290.html
今日推荐
周排行