給定兩個大小為 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 ...