[Leetcode] #239 Sliding Window Maximum

来源:互联网 发布:工业企业数据库 编辑:程序博客网 时间:2024/05/17 01:28

Discription:

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.

For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.

Window position                Max---------------               -----[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

Therefore, return the max sliding window as [3,3,5,5,6,7].

Solution:

vector<int> maxSlidingWindow(vector<int>& nums, int k) {deque<int> que;vector<int> res;for (int i = 0; i < nums.size(); i++){if (!que.empty() && que.front() == i - k)que.pop_front();while (!que.empty() && nums[i] >=nums[que.back()]) que.pop_back();que.push_back(i);if (i >= k - 1)res.push_back(nums[que.front()]);}return res;}

原创粉丝点击