239. Sliding Window Maximum
来源:互联网 发布:淘宝硅胶充气娃娃 编辑:程序博客网 时间:2024/06/03 20:59
这道题是给一个数组和一个滑动窗口的长度k。如果让滑动窗口从数组的头部移动到数组的尾部,每移动一次记录下这个窗口中的最大值。
一开始想用set做,但是没有写对。看了别人的代码发现这个题是考察deque(双向队列)的用法。
定义一个deque的队列q,里面保存的是当前有可能成为窗口最大值的数的下标,下标,下标。重要的事情说三遍。,遍历数组,当遍历到nums[i]时,q中保存的数字最多是i - k - 1~i。所以首先看deque的头部是否小于i - k - 1,是的话要把队头的一个弹出。然后要做的是把nums[i]和队尾的数比较,如果队尾的数小,说明nums[i]加进去就没他什么事儿了,就把队尾弹出,重复这个过程直到队尾元素不再小于nums[i],这时候可以把nums[i]加入队尾了。这时候队头元素就是最大的,不然他早就被弹出去了。
class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> res; deque<int> q; for(int i = 0; i < nums.size(); ++i){ if(!q.empty() && q.front() <= i - k) q.pop_front(); while(!q.empty() && nums[q.back()] < nums[i]) q.pop_back(); q.push_back(i); if(i >= k - 1) res.push_back(nums[q.front()]); } return res; }};
阅读全文
0 0
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- 239. Sliding Window Maximum
- [leetcode] 239.Sliding Window Maximum
- [LeetCode]239.Sliding Window Maximum
- leetcode 239. Sliding Window Maximum
- LeetCode 239. Sliding Window Maximum
- [leetcode] 239. Sliding Window Maximum
- spring只读事务属性和超时事务属性
- 按钮布局演示
- 关于c++异常的初接触try{}catch{}
- 【Redis】——概览
- webpack 单独打包指定JS文件
- 239. Sliding Window Maximum
- LintCode余弦相似度
- 寻找三角形
- 错误:仅当显式请求注释处理时才接受类名称
- CodeForces
- 【安卓小笔记】开发过程的小功能实现
- 每日练习2017-11-06
- OkHttp的同步请求和异步请求
- UI简易框架的学习笔记