一. 無腦傻瓜版本:
沒看答案
1.把兩個陣列合併成乙個陣列並排序;
2.找到新陣列的中位數。
class
solution
:def
findmediansortedarrays
(self, nums1, nums2)
: ls =
list()
for i in nums1:
for j in nums2:
ls.sort(
) num =
len(ls)
a =0if num %2==
0:a =
(ls[num//2-
1]+ ls[num//2]
)/2else
: a = ls[num//2]
return a
複雜度分析:
二. 二分查詢:
主要思路:
class
solution
:def
findmediansortedarrays
(self, nums1, nums2)
: m, n =
len(nums1)
,len
(nums2)
defgetkthitem
(k):
index0, index1 =0,
0# nums1 和 nums2 的指標位置
while
true
:if index0 == m:
return nums2[index1 + k -1]
if index1 == n:
return nums1[index0 + k -1]
if k ==1:
return
min(nums1[index0]
, nums2[index1]
)
newindex0 =
min(index0 + k//2-
1, m-1)
# 二分查詢,且防止越界
newindex1 =
min(index1 + k//2-
1, n-1)
# 二分查詢,且防止越界
prior1, prior2 = nums1[newindex0]
, nums2[newindex1]
if prior1 <= prior2:
# 一次只對乙個陣列進行操作
k -= newindex0 - index0 +
1# k減去刪除元素的個數
index0 = newindex0 +
1# 「刪除」元素
else
: k -= newindex1 - index1 +
1# k減去刪除元素的個數
index1 = newindex1 +
1# 「刪除」元素
totallength = m + n
if totallength %2==
0:return
(getkthitem(totallength//2)
+ getkthitem(totallength//2+
1))/
2else
:return getkthitem(totallength//2+
1)
複雜度分析:
python
class
solution
:def
findmediansortedarrays
(self, nums1: list[
int]
, nums2: list[
int]):
m, n =
len(nums1)
,len
(nums2)
deffindkthnum
(nums1, nums2, k)
: index1, index2 =0,
0while
true
:if index1 == m:
return nums2[index2 + k -1]
elif index2 == n:
return nums1[index1 + k -1]
elif k ==1:
return
min(nums1[index1]
, nums2[index2]
) mid = k//2-
1 newindex1 =
min(index1+mid, m-1)
newindex2 =
min(index2+mid, n-1)
a, b = nums1[newindex1]
, nums2[newindex2]
if a <= b:
k -= newindex1 - index1 +
1 index1 = newindex1 +
1else
: k -= newindex2 - index2 +
1 index2 = newindex2 +1if
(m+n)%2
==1: k =
(m+n+1)
//2return findkthnum(nums1, nums2, k)
else
: k1 =
(m+n)//2
k2 =
(m+n)//2
+1return
(findkthnum(nums1, nums2, k1)
+ findkthnum(nums1, nums2, k2))/
2
二分 尋找兩個正序陣列的中位數
力扣 尋找兩個正序陣列的中位數 hard 如下圖所示,中位數必然滿足這樣的分割線,將兩個陣列分別分為兩個部分,最終組成四個部分,分別為t1 left,t1 right,t2 left,t2 right,其中t1代表第乙個陣列,t2代表第二個陣列,left 代表分割線左邊的部分,right 代表分割線...
尋找兩個正序陣列的中位數
尋找兩個正序陣列的中位數 二分法根據中位數的定義,當 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 思路 因為兩...