Sliding Window Maximum
2015-08-15 11:15
246 查看
使用deque存数组的索引值,保证deque中元素是降序的,即每次取front就能取到最大元素。
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> win;
vector<int> res;
if(nums.size() < k || k == 0) return res;
for(int i=0; i<k; ++i) {
while(win.size() > 0 && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
}
for(int i=k; i<nums.size(); ++i) {
res.push_back(nums[win.front()]);
while (win.empty() != true && i-win.front() >= k) {
win.pop_front();
}
while(win.size() > 0 && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
}
res.push_back(nums[win.front()]);
return res;
}
};
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> win;
vector<int> res;
if(nums.size() < k || k == 0) return res;
for(int i=0; i<k; ++i) {
while(win.size() > 0 && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
}
for(int i=k; i<nums.size(); ++i) {
res.push_back(nums[win.front()]);
while (win.empty() != true && i-win.front() >= k) {
win.pop_front();
}
while(win.size() > 0 && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
}
res.push_back(nums[win.front()]);
return res;
}
};
相关文章推荐
- Zabbix企业级分布式监控系统学习-代理分布式proxy
- PHP opencart 框架后台管理二次开发流程说明
- adobe acrobat pro 抱歉出现中断 但是...解决办法
- libnids插件
- python实现栈和队列
- GCC 的详细使用
- SGU 202 The Towers of Hanoi Revisited (DFS+预处理)
- H5页面性能优化
- phoenixframe平台连接socket服务器,并接收返回值的示例
- C++ 遍历所有文件和文件夹,建立文件夹
- 黑马程序员——Java开发前奏01
- 数据结构之并查集(Union-Find)
- HDU 5389 Zero Escape (类0/1背包)
- Ios 从无到有项目 MVVM模式(两)
- 收藏:oracle中比较两表表结构差异和数据差异的方法
- 【四】C++函数的升级(一)--内联函数
- 2D Lighting System in Monogame
- HDU - 3631 Shortest Path(Floyd最短路)
- 【数据结构与算法】字符串匹配之BF&KMP算法
- 每天五个java相关面试题(1)--struts2部分