演算法實戰(四)尋找兩個有序陣列的中位數

2022-02-05 07:23:02 字數 852 閱讀 6910

今天開始第四題,尋找兩個有序陣列的中位數。這個題leetcode的標記難度是困難,這一看可把我嚇壞了,之前還沒做過困難的題目。但是進去一看,感覺題目挺簡單的,還小小的高興了一會兒,以為是自己的水平變高了。結果打臉來的太快,漏看了乙個條件,要求時間複雜度為o(log(n+m)),果然還是有難度的。話不多說。來看題目。

題目:給定兩個大小為 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

這個題目的意思很容易明白,就是找到兩個陣列合在一起以後的中位數,如果是奇數,那麼就是中間那個,如果是偶數,則中間兩位加起來除以2;

1)外排法:借助乙個新的陣列,再使用兩個指標指向兩個陣列,比較指標所元素,小的放入新陣列,然後移動指標,時間複雜度為o(m+n),**如下:

1

class

solution else

if(index1 19}

20//

根據陣列奇數偶數不同,來計算中位數

21if(num.length % 2 == 0)else26}

27 }

2)上面那種是我最開始做出來的,雖然通過了測試,但是時間複雜度並沒有達到o(log(m+n)),但是第二個方法暫時還沒有想出來,等以後再補上,如果大家有想法的可以即使和我交流分享,謝謝!

二 Leetcode演算法尋找兩個有序陣列的中位數

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

swift演算法 尋找兩個有序陣列中的中位數

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

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

尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...