思路
條件①兩個數組都是有序②時間複雜度要求
O(log(m+n))
- 在一個有序數組中計算中位數很方便,但這是兩個, 雖然是兩個,但是有序,所以兩個數組看成一個就行
- 但是要考慮到一個數組還有很長,另一個數組還有元素
- 最後函數返回值爲
float
編寫
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
# 設置兩個索引, index1, index2分別跟隨nums1, nums2
# first,second 代表第一大和第二大
first = second = 0
index1 = index2 = 0
len1 = len(nums1)
len2= len(nums2)
mid = (len1+len2) //2 +1
for i in range(mid):
second = first
if( (index2 >= len2) or ((index1 < len1) and (nums1[index1] <= nums2[index2]))):
first = nums1[index1]
index1 += 1
else:
first = nums2[index2]
index2 += 1
if((len1+len2) % 2 == 0):
return (first+second)/2
else:
return float(first)
''' #快速解法
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
nums = sorted(nums1 + nums2)
mid = len(nums)//2
if(len(nums)%2 == 0):
return (nums[mid] + nums[mid-1])/2
else:
return float(nums[mid])
'''