我們採用陣列二分查詢演算法,利用bisect包8.6. bisect — 陣列二分查詢演算法¶
,我們先建立第乙個陣列,然後刪除乙個,新增乙個依次繼續
import bisect
class
solution
:def
medianslidingwindow
(self, nums: list[
int]
, k:
int)
-> list[
float]:
#我們利用函式得到我們需要的中位數的位置
median =
lambda a:
(a[(
len(a)-1
)//2]
+ a[
len(a)//2
])/2
a =sorted
(nums[
:k])
res =
[median(a)
]for i, j in
zip(nums[
:-k]
, nums[k:])
: a.remove(i)
a.insert(bisect.bisect_left(a, j)
, j)
)return res
力扣 480 滑動視窗中位數 劃分樹 Treap
思路一 需要一種可以快速求出區間第k kk大的資料結構,那麼主席樹 tre aptreap trea p等都滿足題意,這裡我用了劃分樹,他也可以求出區間第k kk大,不過不支援動態修改,詳見我這篇部落格。class dividetree void build int depth,int l,int ...
480 滑動視窗中位數
題目描述 中位數是有序序列最中間的那個數。如果序列的大小是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個大小為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 ...
480 滑動視窗中位數
中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任...