数据结构和算法经典100题-第32题
来源:互联网 发布:淘货源软件下载 编辑:程序博客网 时间:2024/06/01 18:20
题目要求:
一个整形数组arr和一个大小为w的串口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。
例如:数组为【4,3,5,4,3,3,6,7】,窗口大小为3时:
【4,3,5】,4,3,3,6,7 窗口最大值为5
4,【3,5,4】,3,3,6,7 窗口最大值为5
4,3,【5,4,3】,3,6,7 窗口最大值为5
4,3,5,【4,3,3】,6,7 窗口最大值为4
4,3,5,4,【3,3,6】,7 窗口最大值为6
4,3,5,4,3,【3,6,7】 窗口最大值为7
要求实现一个函数:
输入:整形数组attr,窗口大小为w
输出:一个长度为n-w+1的数组res,res[i]表示每个窗口的最大值。
题目解析:
为了保证时间复杂度是O(N),这道题的关键是构造一个双端队列,存储中间过程窗口最大值下标,再细的先不说了,貌似看这个系列博客的人不多,没有一个评论。
Okay,楼主直接给出代码了哦,no code say what:
bool getMaxWindow(const vector<int> &arr,const int w, vector<int> &res) { if (arr.empty() || 0 >= w) { return false; } deque<int> qmax; int length = (int)arr.size(); for (int i = 0; i < length; ++i) { while (!qmax.empty()) { if (arr[i] < arr[qmax.back()]) { qmax.push_back(i); if (qmax.front() == i - w) { qmax.pop_front(); } break; } else { qmax.pop_back(); } } if (qmax.empty()) { qmax.push_back(i); } if (i >= w - 1) { res.push_back(arr[qmax.front()]); } } return true;}
测试程序:
int main(void) { int tmp[] = {4,3,5,4,3,3,6,7}; vector<int> arr(tmp,tmp+8); vector<int> res; getMaxWindow(arr, 3, res); int len = (int)res.size(); for (int i = 0; i < len; ++i) { cout<<" "<<res[i]; } cout<<endl;}
测试输出结果:
5 5 5 4 6 7Program ended with exit code: 0
路漫漫其修远兮,吾将上下而求索…
0 0
- 数据结构和算法经典100题-第32题
- 数据结构和算法经典100题-第1题
- 数据结构和算法经典100题-第2题
- 数据结构和算法经典100题-第3题
- 数据结构和算法经典100题-第4题
- 数据结构和算法经典100题-第5题
- 数据结构和算法经典100题-第7题
- 数据结构和算法经典100题-第9题
- 数据结构和算法经典100题-第10题
- 数据结构和算法经典100题-第11题
- 数据结构和算法经典100题-第13题
- 数据结构和算法经典100题-第14题
- 数据结构和算法经典100题-第15题
- 数据结构和算法经典100题-第16题
- 数据结构和算法经典100题-第19题
- 数据结构和算法经典100题-第18题
- 数据结构和算法经典100题-第20题
- 数据结构和算法经典100题-第21题
- iphone 开发中使用zbar时遇到的几个典型问题解决方法。
- Android常用数据库ORM框架ORMlite和GreenDao比较
- (二)WCF的Binding模型
- windows下搭建Mahout单机环境
- Static Libs With Support to iOS 5 and Arm64
- 数据结构和算法经典100题-第32题
- 文件下载
- Zbar library for iphone 5 (armv7s)
- 做自己想做的工作,你也可以!
- jbpm6.1.0 jbpm-console
- centos5.5配置网络连接(阿和整理)
- countUp.js 数字动画
- Java多线程之生产者消费者2
- 自定义列表li项目符号