1. 程式人生 > >239.滑動視窗的最大值

239.滑動視窗的最大值

給定一個數組 nums,有一個大小為 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。

返回滑動視窗最大值。

示例:

輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
輸出: [3,3,5,5,6,7] 解釋:   滑動視窗的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7

注意:

你可以假設 總是有效的,1 ≤ k ≤ 輸入陣列的大小,且輸入陣列不為空。

進階:

你能線上性時間複雜度內解決此題嗎?

class Solution { public:     vector<int> maxSlidingWindow(vector<int>& nums, int k) {         vector<int> ret;         deque<int> ind;         if(nums.size()==0)             return ret;         for(int i=0;i<k;i++)         {             while(!ind.empty()&&nums[i]>=nums[ind.back()])                 ind.pop_back();             ind.push_back(i);         }         for(int i=k;i<nums.size();i++)         {             ret.push_back(nums[ind.front()]);             while(!ind.empty()&&nums[i]>=nums[ind.back()])                   ind.pop_back();             if(!ind.empty()&&ind.front()<=i-k)                 ind.pop_front();             ind.push_back(i);                            }         ret.push_back(nums[ind.front()]);         return ret;     } };