尋找兩個正序陣列的中位數

2021-10-16 21:37:58 字數 1596 閱讀 2996

給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數

示例 1:

輸入:nums1 = [1,3], nums2 = [2]

輸出:2.00000

解釋:合併陣列 = [1,2,3] ,中位數 2

示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]

輸出:2.50000

解釋:合併陣列 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5

示例 3:

輸入:nums1 = [0,0], nums2 = [0,0]

輸出:0.00000

示例 4:

輸入:nums1 = , nums2 = [1]

輸出:1.00000

示例 5:

輸入:nums1 = [2], nums2 =

輸出:2.00000

這裡我給出了一種解答 整體的思路還是很簡單,就歸併後排序 然後在找出中間值!

class

solution

:def

findmediansortedarrays

(self, nums1: list[

int]

, nums2: list[

int])-

>

float

:# 我的整體思路是歸併之後排序 在找中間值

num=nums1+nums2 # 將兩個列表加在一起

num.sort(

)# 排序

count_1=

0# 這裡做了乙個計數器

for i in num:

# 遍歷num中的每乙個元素看它是否等於0

if i==0:

# 如果列表中的元素為0

count_1+=

1# 那麼計數器+1

if count_1==

len(num)

:# 如果計數器和列表的長度相等的話 那就可以認為裡面的元素全部是0

return

0# 然後就直接返回0

elif

len(num)==1

:# 如果列表中的長度為1的話

return num[0]

# 就直接返回該元素即可

elif

len(num)%2

==0:# 這裡的列表中元素為偶數的情況

return

(num[

int(

len(num)/2

-1)]

+num[

int(

len(num)/2

)])/

2# 先用列表的長度除以2 就可以得到中間項

# 因為偶數的話中間有兩項 根據題意 就應該是把中間兩項加起來然後再除以2

elif

len(num)%2

!=0:# 這裡是奇數的情況

return num[

int(

len(num)/2

+0.5)-

1]# 奇數的話就只需找到num中間項的索引然後直接返回就可以了

尋找兩個正序陣列的中位數

尋找兩個正序陣列的中位數 二分法根據中位數的定義,當 m n 是奇數時,中位數是兩個有序陣列中的第 m n 2 個元素,當 m n 是偶數時,中位數是兩個有序陣列中的第 m n 2 個元素和第 m n 2 1 個元素的平均值。因此,這道題可以轉化成尋找兩個有序陣列中的第 k 小的數,其中 k 為 m...

尋找兩個正序陣列的中位數

題目 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 思路 因為兩...

尋找兩個正序陣列的中位數

突然發現還有文章標題,前兩天忘記寫了,今天是自己搞出來的 廢話不多說,開整 示例 1 輸入 nums1 1,3 nums2 2 輸出 2.00000 解釋 合併陣列 1,2,3 中位數 2 示例 2 輸入 nums1 1,2 nums2 3,4 輸出 2.50000 解釋 合併陣列 1,2,3,4 ...