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() //------ 輸出現有元素的個數
相關文章
- Leetcode 239. 滑動視窗最大值 (Java實現 超詳細註釋!)LeetCodeJava
- 滑動視窗最大值的golang實現Golang
- 騰訊面試題-求滑動視窗的最大值面試題
- [Leetcode]雙項佇列解決滑動視窗最大值難題LeetCode佇列
- 滑動視窗法——Leetcode例題LeetCode
- 演算法題:返回滑動視窗中的最大值演算法
- 程式碼隨想錄 第13天 | ● 239. 滑動視窗最大值 ● 347.前 K 個高頻元素 ● 總結
- Leetcode 239 滑動視窗最大值 與堆排序kotlin語言(超時)LeetCode排序Kotlin
- [劍指offer題解][Java]佇列的最大值/滑動視窗的最大值Java佇列
- Sentinel 原理-滑動視窗
- [每日一題] 第二十六題:滑動視窗的最大值每日一題
- 滑動視窗演算法演算法
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- TCP 流量控制-滑動視窗TCP
- 滑動視窗演算法思路演算法
- Sentinel滑動視窗演算法演算法
- 滑動視窗分析SQL實踐SQL
- Flink的滾動視窗、會話視窗、滑動視窗及其應用會話
- mysql視窗函式中的滑動視窗MySql函式
- 自己實現一個滑動視窗
- 力扣刷題-滑動視窗(字串)力扣字串
- (轉)leetcode:Find All Anagrams in a String 滑動視窗方法總結LeetCode
- WeetCode2滑動視窗系列
- leetcode刷題記錄:演算法(三)滑動視窗演算法LeetCode演算法
- Hive實戰—時間滑動視窗計算Hive
- 氣球遊戲騰訊面試題滑動視窗解法遊戲面試題
- 【演算法】滑動視窗三步走演算法
- 滑動視窗相關的題目總結
- 滑動視窗(Sliding Window)技巧總結
- Leetcode 題解系列 -- 和為s的連續正數序列(滑動視窗)LeetCode
- 對滑動視窗單調性的一點思考
- 滑動視窗演算法(Sliding Window Algorithm)演算法Go
- 使用 Redis 實現限流——滑動視窗演算法Redis演算法
- 滑動視窗(Sliding Window)演算法介紹演算法
- Golang的滑動視窗計數器Redis限速實現GolangRedis
- 《面試必備演算法》系列 滑動視窗入門面試演算法
- 滑動視窗演算法基本原理與實踐演算法
- [分散式限流] 滑動視窗演算法的 Golang 實現分散式演算法Golang