LeetCode 239. 滑動視窗最大值
題目描述
解題思路
線性掃描
藉助一個輔助佇列(雙端佇列),從頭遍歷陣列,根據如下規則進行入佇列或出佇列操作:
1. 如果佇列為空,則當前數字入佇列
2. 如果當前數字大於佇列尾,則刪除佇列尾,直到當前數字小於等於佇列尾,或者佇列空,然後當前數字入佇列
3. 如果當前數字小於佇列尾,則當前數字入佇列
4. 如果佇列頭超出滑動視窗範圍,則刪除佇列頭
這樣能始終保證佇列頭為當前的最大值
程式碼實現
class Solution
{
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k)
{
vector<int> f;
int n = nums.size();
if(n == 0 || k > n)
return f;
deque<int> que;
for(int i = 0; i < n; i++)
{
if(!que.empty())
{
if(i >= que.front()+k)
que.pop_front();
while(!que.empty() && nums[i] >= nums[que.back()])
que.pop_back();
}
que.push_back(i);
if(i+1 >= k)
f.push_back(nums[que.front()]);
}
return f;
}
};
附:C++雙端佇列用法
//呼叫標頭檔案:
#include<deque>
using namespace std;
//詳細用法(部分):
deque<Type> k; //------ 定義一個deque的變數(定義時已經初始化) //例如: deque<int> k;
k.empty() //------ 檢視是否為空範例,是的話返回1,不是返回0
k.clear() //------ 清除佇列裡的所有資料
k.push_front(i) //------ 從已有元素前面增加元素i(隊伍大小不預設)
k.push_back(i) //------ 從已有元素後面增加元素i(隊伍大小不預設)
k.pop_front() //------ 清除第一個元素
k.pop_back() //------ 清除最後一個元素
k.front() //------ 顯示第一個元素 例如n = k.front();
k.back() //------ 顯示最後一個元素
k.size() //------ 輸出現有元素的個數
相關文章
- 239. 滑動視窗最大值
- Leetcode 239. 滑動視窗最大值 (Java實現 超詳細註釋!)LeetCodeJava
- 滑動視窗最大值的golang實現Golang
- [Python手撕]滑動視窗最大值Python
- 滑動視窗最大值——棧與佇列佇列
- 騰訊面試題-求滑動視窗的最大值面試題
- [Leetcode]雙項佇列解決滑動視窗最大值難題LeetCode佇列
- 滑動視窗法——Leetcode例題LeetCode
- 演算法題:返回滑動視窗中的最大值演算法
- Leetcode 239 滑動視窗最大值 與堆排序kotlin語言(超時)LeetCode排序Kotlin
- 程式碼隨想錄 第13天 | ● 239. 滑動視窗最大值 ● 347.前 K 個高頻元素 ● 總結
- 「LeetCode Top100」之滑動視窗LeetCode
- Sentinel 原理-滑動視窗
- 細聊滑動視窗
- [劍指offer題解][Java]佇列的最大值/滑動視窗的最大值Java佇列
- [每日一題] 第二十六題:滑動視窗的最大值每日一題
- 滑動視窗演算法演算法
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- TCP 流量控制-滑動視窗TCP
- 滑動視窗演算法思路演算法
- Sentinel滑動視窗演算法演算法
- 滑動視窗分析SQL實踐SQL
- 滑動視窗問題總結
- 滑動視窗與雙指標指標
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- mysql視窗函式中的滑動視窗MySql函式
- Day10(棧與佇列) | 150. 逆波蘭表示式求值 239. 滑動視窗最大值 347.前 K 個高頻元素佇列
- 自己實現一個滑動視窗
- 力扣刷題-滑動視窗(字串)力扣字串
- (轉)leetcode:Find All Anagrams in a String 滑動視窗方法總結LeetCode
- 程式碼隨想錄刷題day 11 | **150. 逆波蘭表示式求值** **239. 滑動視窗最大值** **347.前 K 個高頻元素**
- 程式碼隨想錄演算法訓練營第23天(補第11天)|150. 逆波蘭表示式求值,239. 滑動視窗最大值演算法
- WeetCode2滑動視窗系列
- TCP的滑動視窗和擁塞控制TCP
- leetcode刷題記錄:演算法(三)滑動視窗演算法LeetCode演算法
- Hive實戰—時間滑動視窗計算Hive
- 氣球遊戲騰訊面試題滑動視窗解法遊戲面試題
- 【演算法】滑動視窗三步走演算法