leetcode 480 滑動視窗中位數

2021-10-18 23:42:21 字數 609 閱讀 6588

基本思路是具備的,利用兩個堆,這樣我們就可以直接得到,中位數相關的兩個元素。查詢的複雜度可以控制在o(1).

所以,還需要兩個操作, 插入和刪除。

由於堆的特點:只能訪問堆頂的元素。 所以,如果刪除的元素,不在堆頂的話,就只能延遲刪除。為了查詢的時間複雜度,只能使用堆這種結構來維護資料的有序。

插入的話,如果細分的話,情況太多【包括,空堆、刪除元素的位置】,細節過於繁瑣。但是,我們可以看看最後的結果,必然是兩個堆,大根堆,比小根堆最多多乙個元素。

所以,採用另一種實現方式。

不需要每一步都細分,先將元素放到小跟堆。

只要大根堆是空,直接將元素插入到大根堆。 或者元素比小根堆小的話,也是如此。其他情況,插入到大根堆。

但是會出現,堆不平衡的現象,我們只需要調整一下就可了。

為了查詢的複雜度,我們需要每次將延遲刪除的元素每次堆頂元素變化後,進行刪除操作。

因為每次插入都是乙個元素,所以操作並不是特別複雜,情況還算比較簡單。

leetcode480 滑動視窗中位數

中位數是有序序列最中間的那個數。如果序列的大小是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給出乙個陣列 nums,有乙個大小為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任...

leetcode 480 滑動視窗中位數

中位數是有序序列最中間的那個數。如果序列的大小是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個大小為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任...

leetcode 480 滑動視窗中位數

目錄 一 題目內容 二 解題思路 三 中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k ...