class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int>res;
//各種情況都得討論,不然下方有用下標,會導致段錯誤
if(nums.size()==0||k==0||k>nums.size())return res;
//用雙端隊列來存向量中的索引
deque<int>record;
//先初始化雙端隊列,,
for(int i=0;i<k;i++)
{
//比較當前值是否比隊列中存放的後端索引對應的值大,如果大,彈出,直到隊列爲空
while(record.size()!=0&&nums[i]>nums[record.back()])record.pop_back();
//當前值比隊列中存放的後端索引對應的值小,或者隊列爲空時,添加
record.push_back(i);
}
res.push_back(nums[record.front()]);
for(int i=k;i<nums.size();i++)
{
if(record.size()!=0&&record.front()<=i-k)record.pop_front();
//比較當前值是否比隊列中存放的後端索引對應的值大,如果大,彈出,直到隊列爲空
while(record.size()!=0&&nums[i]>nums[record.back()])record.pop_back();
//當前值比隊列中存放的後端索引對應的值小,或者隊列爲空時,添加
record.push_back(i);
res.push_back(nums[record.front()]);
}
return res;
}
};