最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

280. 239. 滑動窗口中位數(shù)/最大值 | 滑動窗口系列

2020-04-23 12:11 作者:有木乘舟  | 我要投稿


分析:

? 這題最直觀的解法,就是在數(shù)組中對窗口內(nèi)的數(shù)字進行排序,然后計算中位數(shù):

最直觀的暴力解法

? 但是,暴力解法永遠面臨的一個問題就是時間復(fù)雜度過大,因此我們就需要針對窗口的刪除、添加元素和排序進行優(yōu)化。

? 首先肯定不能在窗口移動的時候進行排序,這樣會浪費大量的時間,因此我們先在循環(huán)外部排好序,然后在每次窗口移動的時候,移除最左邊的元素,往最右邊添加一個元素。接著,對添加進來的元素進行排序,使窗口數(shù)組仍然有序。

? 因為vector已經(jīng)是有序數(shù)組,所以不能直接刪除第一個元素,而是要找到與nums[left]相同的那個元素,left指向的元素才是窗口最左邊的元素。這里可以用二分查找法來找到這個元素,然后刪除。

? 刪除掉窗口最左邊元素后,我們將新的元素添加進窗口,同時使窗口數(shù)組保持有序。這里可以直接用插入排序來插入新元素。在這題中,因為只需要插入一個元素,所以插入排序是優(yōu)于快速排序的。

? 注意:

  1. 這里有個編譯器上的坑,在vsCode等本地編譯器上,當vector.size()=0的時候,調(diào)用vector.back()還是會返回一個數(shù)字,但是在力扣中國的編譯器上,會提示錯誤,因此我們需要加入一個條件,判斷當窗口為空的時候,直接添加元素。

? 除此之外,官方給出的標準答案是使用雙堆來解題,以及c++獨有的STL容器中的多重集合。

參考答案:

https://leetcode-cn.com/problems/sliding-window-median/solution/hua-dong-chuang-kou-zhong-wei-shu-by-leetcode/

? 這題和280是一樣的,只需要把判斷條件換成取最大值即可,即 res.push_back(window.back());

? 不過題目有個額外要求,就是看能不能把時間復(fù)雜度降到O(N), 我們之前的方法復(fù)雜度至少是O(NlogN),要降到O(N)一般都是使用動態(tài)規(guī)劃來解答。

280. 239. 滑動窗口中位數(shù)/最大值 | 滑動窗口系列的評論 (共 條)

分享到微博請遵守國家法律
洛川县| 白沙| 和硕县| 宝鸡市| 揭阳市| 克拉玛依市| 黑龙江省| 西乌| 门源| 宿迁市| 襄汾县| 云阳县| 呼和浩特市| 东城区| 新建县| 河池市| 瑞丽市| 永平县| 庆云县| 红桥区| 祁连县| 昌江| 林甸县| 商都县| 北安市| 屏山县| 喀喇| 临邑县| 枣庄市| 嘉善县| 昌邑市| 永定县| 庄河市| 安阳县| 太原市| 河北区| 锡林郭勒盟| 井陉县| 岑巩县| 江津市| 泸水县|