LeetCode4兩個排序陣列的中位數
阿新 • • 發佈:2018-11-04
這一題我今天的做的時候覺得再簡單不過了,不知道為什麼等級是困難級別的,真的是覺得沒有什麼難點的
4 兩個排序陣列的中位數
給定兩個大小為 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. 先把A, B兩個陣列整合到C數組裡,然後用sorted排序方法將C數組裡元素按照從小到大的順序依次排序
2. 再根據C數組裡元素的個數依次選取中位數;如果個數為偶數,則取中間兩個元素的中間值;如果個數為奇數。則直接取中間元素作為中位數了
是不是覺得很簡單,我覺得大部分人應該是和我一樣的想法的
程式碼如下:
def findMedianSortedArrays(self, nums1, nums2): SumArray = [] SumArray.extend(nums1) SumArray.extend(nums2) SumArray = sorted(SumArray) midNum = 0.0 if len(SumArray)%2 == 0: midNum = (SumArray[int(len(SumArray)/2) - 1] + SumArray[int(len(SumArray)/2)])/2 else: midNum = SumArray[int((len(SumArray) - 1)/2)] return midNum
執行時間如下圖