239. Sliding Window Maximum

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.

For example,
Given nums = <code>[1,3,-1,-3,5,3,6,7]</code>, and k = 3.

Window position Max
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7

Therefore, return the max sliding window as <code>[3,3,5,5,6,7]</code>.

Note:
You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.

解題思路

這題受到求滑動窗口中位數(shù)的思想啟發(fā)详幽,可以使用有效元素概念。使用一個hash表保存被剔除的無效元素版姑。然后使用最大堆去求窗口內(nèi)的最大值迟郎,只要保證堆頂部的元素一定是有效的就可以了。

代碼

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        unordered_map<int, int> hash; 
        priority_queue<int, vector<int>> heap;
        vector<int> res;
        
        for (int i = 0; i < nums.size(); i++) {
            if (i < k) {
                heap.push(nums[i]);
            } else {
                res.push_back(heap.top());
                heap.push(nums[i]);
                hash[nums[i - k]] ++;
                while (!heap.empty() && hash[heap.top()]) {
                    hash[heap.top()]--;
                    heap.pop();
                }
            }
        }
        if (!heap.empty()) {
            res.push_back(heap.top());
        }
        return res;
    }
};

當然表制,本題還有一種正解,那就是使用單調(diào)棧控乾。單調(diào)棧么介,顧名思義蜕衡,就是單調(diào)遞增或者單調(diào)遞減的棧。單調(diào)棧有很多應(yīng)用,我們主要介紹在這里的應(yīng)用蒜绽。

首先桶现,我們需要明白:

當取一個大小為k的值時鼎姊,排在k前面的比k小的元素都不可能成為滑動窗口中的最大值。

由此相寇,我們可以維護一個單調(diào)遞減的單調(diào)棧:

Step1 : 判斷棧底是否需要被彈出(即元素已經(jīng)無效
Step2 :對于每一個進棧的元素,去除棧頂每一個比他小的元素唤衫,再將其入棧
Step3 :棧底的元素值即為當前窗口的最大值

由于我們的棧比較特殊,需要在棧底和棧頂操作休里,所以我們使用雙端隊列來實現(xiàn):

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> dq;
        vector<int> ans;
        for (int i=0; i<nums.size(); i++) {
            if (!dq.empty() && dq.front() == i-k) dq.pop_front();
            while (!dq.empty() && nums[dq.back()] < nums[i])
                dq.pop_back();
            dq.push_back(i);
            if (i>=k-1) ans.push_back(nums[dq.front()]);
        }
        return ans;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赃承,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拭嫁,更是在濱河造成了極大的恐慌抓于,老刑警劉巖做粤,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怕品,死亡現(xiàn)場離奇詭異,居然都是意外死亡堵泽,警方通過查閱死者的電腦和手機恢总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纹安,“玉大人,你說我怎么就攤上這事厢岂。” “怎么了塔粒?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長船老。 經(jīng)常有香客問我圃酵,道長,這世上最難降的妖魔是什么郭赐? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮俘陷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岭洲。我一直安慰自己坎匿,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布替蔬。 她就那樣靜靜地躺著,像睡著了一般驻粟。 火紅的嫁衣襯著肌膚如雪凶异。 梳的紋絲不亂的頭發(fā)上蜀撑,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天酷麦,我揣著相機與錄音,去河邊找鬼沃饶。 笑死,一個胖子當著我的面吹牛糊肤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播馆揉,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼升酣,長吁一口氣:“原來是場噩夢啊……” “哼勤讽!你這毒婦竟也來了拗踢?” 一聲冷哼從身側(cè)響起向臀,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤券膀,失蹤者是張志新(化名)和其女友劉穎君纫,沒想到半個月后芹彬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡会喝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年玩郊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片译红。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡侦厚,死狀恐怖耻陕,靈堂內(nèi)的尸體忽然破棺而出刨沦,到底是詐尸還是另有隱情,我是刑警寧澤想诅,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站裁眯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏穿稳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一旦袋、第九天 我趴在偏房一處隱蔽的房頂上張望它改。 院中可真熱鬧疤孕,春花似錦央拖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伦腐。三九已至失都,卻和暖如春柏蘑,著一層夾襖步出監(jiān)牢的瞬間粹庞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工黔攒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人督惰。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓旅掂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親商虐。 傳聞我的和親對象是個殘疾皇子崖疤,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容