尋找兩個正序數組的中位數(Python,LeetCode)

目錄

題目描述

輸入/輸出描述

解決方案

代碼

代碼走讀

傳送門


題目描述

給定兩個大小爲m和n的正序(從小到大)數組nums1和nums2。請你找出這兩個正序數組的中位數,並且要求算法的時間複雜度 O(log(m+n)) 。你可以假設nums1和nums2不會同時爲空。

 

輸入/輸出描述

給定數組1 [1, 2]
給定數組2 [3, 4]
輸出 2.5
解釋 因爲兩個數組合並後按從小到大排序後的結果是[1, 2, 3, 4],則其中位數爲 (2 + 3)/ 2 = 2.5

 

解決方案

將兩個數組合並後按照從小到大的序列排序,按照中位數的計算規則求出中位數的值。

中位數計算規則:

1、如果數列長度是奇數,則中位數對應的下標爲 (length / 2) + 1

2、如果數列長度是偶數,則中位數對應下標爲 length / 2的數字和 (length / 2) + 1 兩數的平均值。

 

代碼

class Solution:
    def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
        nums1.extend(nums2)
        nums1.sort()

        length = len(nums1)
        if length % 2 == 0:
            return (nums1[int(length/2 - 1)] + nums1[int(length/2)]) / 2.0
        else:
            return nums1[int((length+1)/2 - 1)]

 

代碼走讀

# LeetCode定義解決方案類
class Solution:
    def findMedianSortedArrays(self, nums1: list, nums2: list) -> float:
        # 將兩個列表合併後按照從大到小的順序排序
        nums1.extend(nums2)
        nums1.sort()

        # 判斷合併後列表的長度是奇數還是偶數,然後根據中位數計算規則計算出中位數
        length = len(nums1)
        if length % 2 == 0:
            return (nums1[int(length/2 - 1)] + nums1[int(length/2)]) / 2.0
        else:
            return nums1[int((length+1)/2 - 1)]


# 自測用例
if __name__ == '__main__':
    s = Solution()
    result = s.findMedianSortedArrays([1, 2], [3])
    print(result)

 

傳送門

LeetCode試題鏈接

list.extend()方法

list.sort()方法

len()函數

int()函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章