尋找兩個已排序陣列的中位數

2021-08-19 22:31:16 字數 918 閱讀 1408

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2 。

請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o(log (m+n)) 。

nums1 = [1, 3]

nums2 = [2]

中位數是 2.0

nums1 = [1, 2]

nums2 = [3, 4]

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

class solution 

while(i == nums1l && j < nums2l)

while(i < nums1l && j == nums2l)

if(num.length % 2 == 0)

else

return result;}}

可以說合併排序是比較複雜的排序,特別是對於不了解分治法基本思想的同學來說可能難以理解。總時間=分解時間+解決問題時間+合併時間。分解時間就是把乙個待排序序列分解成兩序列,時間為一常數,時間複雜度o(1).解決問題時間是兩個遞迴式,把乙個規模為n的問題分成兩個規模分別為n/2的子問題,時間為2t(n/2).合併時間複雜度為o(n)。總時間t(n)=2t(n/2)+o(n).這個遞迴式可以用遞迴樹來解,其解是o(nlogn).此外在最壞、最佳、平均情況下歸併排序時間複雜度均為o(nlogn).從合併過程中可以看出合併排序穩定。 

用遞迴樹的方法解遞迴式t(n)=2t(n/2)+o(n):假設解決最後的子問題用時為常數c,則對於n個待排序記錄來說整個問題的規模為cn。

從這個遞迴樹可以看出,第一層時間代價為cn,第二層時間代價為cn/2+cn/2=cn.....每一層代價都是cn,總共有logn+1層。所以總的時間代價為cn*(logn+1).時間複雜度是o(nlogn).

尋找兩個有序陣列的中位數

尋找兩個有序陣列的中位數 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...

尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 n...