码迷,mamicode.com
首页 > 其他好文 > 详细

239-滑动窗口最大值

时间:2020-03-14 23:40:44      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:pop   closed   splay   res   click   for   png   遍历数组   ide   

1.暴力法,思路比较简单,复杂度O(N*K)

2.用双端队列进行展示

想到双端队列的思路:只要遍历该数组,同时在双端队列的头去维护当前窗口的最大值(在遍历过程中,发现当前元素比队列中的元素大,就将原来队列中的元素祭天),在整个遍历的过程中我们再记录下每一个窗口的最大值到结果数组中。这样就是遍历数组的复杂度O(n)

假设 nums = [1,3,-1,-3,5,3,6,7],和 k = 3

技术图片

 

 (转自小浩漫画算法)

技术图片
 1 class Solution {
 2 public:
 3     vector<int> maxSlidingWindow(vector<int>& nums, int k) {
 4         vector<int> res;
 5         if (nums.size() == 0)
 6         {
 7             return res;
 8         }
 9         if (k == 1)//长度为1,就是自身
10         {
11             return nums;
12         }
13         deque<int> maxque;
14         maxque.push_back(nums[0]);
15         int maxk = nums[0];
16         for (int i = 1; i < k; i++)
17         {
18             if (i == nums.size())   //万一k比nums的个数还要大
19             {
20                 res.push_back(maxk);
21                 return res;
22             }
23             if (maxk < nums[i])
24             {
25                 maxk = nums[i];
26             }
27             while (!maxque.empty() && nums[i] > maxque.back())//从尾部开始把每个小于nums[i]的数去除。
28             {
29                 maxque.pop_back();
30             }
31             maxque.push_back(nums[i]);
32         }
33         
34         res.push_back(maxk);//第一个窗口的最大值
35 
36         for (int i = k; i < nums.size(); i++)
37         {
38             if (nums[i - k] == maxque.front())//nums[i-k]移出窗口,如果队列头是nums[i-k]就要去除掉
39             {
40                 maxque.pop_front();
41             }
42             while (!maxque.empty() && nums[i] > maxque.back())//从尾部开始把每个小于nums[i]的数去除。
43             {
44                 maxque.pop_back();
45             }
46             maxque.push_back(nums[i]);
47             res.push_back(maxque.front());
48         }
49         return res;
50     }
51 };
View Code

 

239-滑动窗口最大值

标签:pop   closed   splay   res   click   for   png   遍历数组   ide   

原文地址:https://www.cnblogs.com/nxnslc-blog/p/12494990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!