博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】滑动窗口的最大值,C++实现
阅读量:5757 次
发布时间:2019-06-18

本文共 1226 字,大约阅读时间需要 4 分钟。

原创博文,转载请注明出处!

# 题目

# 思路

      利用C++中的双端队列保存有可能是滑动窗口最大值的下标,其中队首元素保存当前窗口最大值的下标。当滑动窗口改变时,更新队列。队列更新的规则:(1)新元素依次与队尾元素比较,如果队尾元素小于新元素,则删除队尾元素,直至队列中没有小于新元素的值。(2)更新队首元素,如果队首元素不在新滑动窗口中,则删除队首元素。(3)把每次滑动的数字的下标压入队列

找出数组中大小为3的滑动窗口的最大值,在队列中的下标一列,小括号前面的数字表示数字在数组中的下标。

# 代码

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 class Solution { 7 public: 8 vector
maxInWindows(const vector
& num, unsigned int size) 9 { 10 vector
res; // 存储每个滑动窗口的最大值 11 deque
s; // 保存滑动窗口最大值数字的下标 12 13 for(unsigned int i=0;i
size) 21 s.pop_front(); 22 23 // 更新队列:新元素的下标加入队列 24 s.push_back(i); 25 26 // 存储结果 27 if(size&&i+1>=size) 28 res.push_back(num[s.front()]); 29 } 30 return res; 31 } 32 }; 33 int main() 34 { 35 unsigned int size = 3; 36 const vector
num = {1,2,3,4,5,6,7,8,9}; 37 38 Solution solution; 39 solution.maxInWindows(num,size); 40 return 0; 41 } 42
View Code

# 复杂度

       O(n)

# 测试用例

      

 

转载于:https://www.cnblogs.com/wanglei5205/p/9036452.html

你可能感兴趣的文章
tomcat 安装
查看>>
我的友情链接
查看>>
Centos6.6安装选包及基础场景说明
查看>>
java基础面试题-1
查看>>
深克隆与序列化效率的比较
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
nagios监控使用139邮箱报警
查看>>
Windows Phone 7 中各种Task解说(启动器与选择器)
查看>>
罗森伯格助力2011年中国智能建筑技术发展应用论坛哈尔滨站
查看>>
网络割接
查看>>
windows server 2016 活动目录(二)
查看>>
openstack G版 修改vm的flavor级别
查看>>
python_控制台输出带颜色的文字方法
查看>>
java泛型中特殊符号的含义
查看>>
一秒 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql 问题
查看>>
Android组件化最佳实践 ARetrofit原理
查看>>
舍弃浮躁, 50条重要的C++学习建议
查看>>
同步手绘板——将View的内容映射成Bitmap转图片导出
查看>>
【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!...
查看>>
微信小程序之wx.navigateback往回携带参数
查看>>