目錄
題目描述
給定兩個大小爲m和n的正序(從小到大)數組nums1和nums2。請你找出這兩個正序數組的中位數,並且要求算法的時間複雜度 。你可以假設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)