classSolution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k){ vector<int> ans; deque<int> deq; int n = nums.size(); //我们要把数组的下标放到deque中去 //方便起见,我们把deque中的数代指vector中的数 for (int i = 0; i < n; i++){ //每次进来的如果比deque中的所有数要大,尾部比它小的都要清空 while(!deq.empty() && nums[i] > nums[deq.back()]){ deq.pop_back(); } //一共要循环i-k+1次,所以当deq.front()到达i-k+1就不再进行循环了 if (!deq.empty() && deq.front() < i - k + 1) deq.pop_front(); //每次都需要把下标压入deque deq.push_back(i); //因为前几次,deque.front()还没有移动到vector[0],所以不能算 if (i >= k -1) ans.push_back(nums[deq.front()]); } return ans;