給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。
請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。
你可以假設 nums1 和 nums2 不會同時為空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
則中位數是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
則中位數是 (2 + 3)/2 = 2.5
解答1:
publicview codestatic
double findmediansortedarrays(int nums1,int
nums2)
/*定義'割'後的第乙個陣列左邊最大值,右邊最小值,第二個陣列左邊最大值,右邊最小值
*/double lmax1=0,lmax2=0,rmin1=0,rmin2=0;
/*lo是二分法左邊的點,hi是二分法右邊的點,需要把m長度變成偶數,c1是陣列1的割點,c2是陣列2的割點
*/int lo=0,hi=2*m,c1,c2;
/*當左邊的點小於等於右邊的點時繼續
*/while (lo<=hi)
else
if(lmax2>rmin1)
else
}return (math.max(lmax1,lmax2)+math.min(rmin1,rmin2))/2;
}
尋找有序陣列中位數
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...
尋找兩個有序陣列的中位數
尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...
尋找兩個有序陣列的中位數
思路 將兩個陣列排序,然後判斷陣列長度,長度為單數,則取二分之一處的數,否則取二分之一處和二分之一減一處的數之和除以2.var findmediansortedarrays function nums1,nums2 var mid math.floor arr.length 2 if arr.len...