劍指 Offer 59 - I. 滑動視窗的最大值
阿新 • • 發佈:2020-08-16
class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { if(nums.size()==0) return {}; deque<int>deqmax; vector<int>res; //首先第一個視窗開始進隊 for( int i=0;i<nums.size();i++ ) { //向右擴一個 //如果佇列一開始不為空且存的下標所指的值比要入隊的數小,就迴圈出隊 while( !deqmax.empty()&& nums[deqmax.back()]<=nums[i] ) { deqmax.pop_back(); } deqmax.push_back( i ); //向左縮一個 //如果這個值需要更新(頭的下標就是需要縮的那個下標的話)那麼就出隊 if( deqmax.front()==i-k ) { deqmax.pop_front(); } //把視窗最大值記錄 if( i>=k-1 ) { res.push_back( nums[deqmax.front()] ); } } return res; } };