1. 程式人生 > >LeetCode4兩個排序陣列的中位數

LeetCode4兩個排序陣列的中位數

這一題我今天的做的時候覺得再簡單不過了,不知道為什麼等級是困難級別的,真的是覺得沒有什麼難點的

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

執行時間如下圖