无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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ù)/最大值 | 滑動窗口系列的評論 (共 條)

分享到微博請遵守國家法律
武夷山市| 定西市| 吕梁市| 汝南县| 天柱县| 玛沁县| 宁波市| 达孜县| 定边县| 屏南县| 呼玛县| 会理县| 淮滨县| 安乡县| 徐闻县| 资中县| 天气| 治多县| 会昌县| 兴和县| 读书| 建阳市| 桦川县| 甘泉县| 江孜县| 嘉义县| 洛川县| 蒙自县| 灵寿县| 富宁县| 鄂伦春自治旗| 华容县| 灵石县| 隆子县| 屏东县| 汝城县| 永仁县| 宣威市| 浮梁县| 浙江省| 衡东县|