给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
来源:互联网 发布:maya mac 破解版 编辑:程序博客网 时间:2024/06/01 17:41
本题源自剑指offer
--------------------------------------------------------------
1 暴力解决 遍历数组n,在一次遍历滑动窗口k,时间复杂度为O(nk);
代码:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) { vector<int> result; if(num.size()==0||size>num.size()||size==0) return result; for(int i=0;i<=(num.size()-size);i++){ int max=num[i]; for(int j=i+1;j<i+size;j++){ if(max<num[j]){ max=num[j]; } } result.push_back(max); } return result; }
2 利用双端队列存储数组的下标。如果队列中值小于要入队的就弹出队尾,再入队。如果队列头的下标不在窗口内就弹出。保证队列头窗口是最大值。
vector<int> maxInWindows(const vector<int>& num, unsigned int size) { vector<int> res; deque<int> s; for(unsigned int i = 0; i < num.size(); ++i){ while(s.size() && num[s.back()] <= num[i]) s.pop_back(); while(s.size() && i - size >= s.front()) s.pop_front(); s.push_back(i); if(size && i + 1 >= size) res.push_back(num[s.front()]); } return res; }
阅读全文
0 0
- 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
- 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。
- 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,
- 45.找出所有滑动窗口里数值的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- 滑动窗口的最大值
- django一个project中使用多个数据库
- win10 hyper-v安装kali linux
- SSH(第四步)—— 单独配置Hibernate框架到web项目
- opengl从画三角形到画一个立方体(一)
- XCode9 拖入文件 不自动添加 compile sources
- 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
- Java面试题及解析
- python3类
- 学生信息管理系统总结
- 3、HTML 学习记录——元素、属性
- 允许部分页面横竖屏
- Java 序列化 详解
- SSH(第五步)—— 整合Hibernate和Spring
- Struts