面试题目65(滑动窗口的最大值)

来源:互联网 发布:医疗器械注册 软件 编辑:程序博客网 时间:2024/06/10 19:12

题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口的最大值,例如如果输入数组是

{2,1,3,2,6,2,5,1},则滑动窗口的最大值是{3,3

#include<iostream>#include<deque>#include<vector>using namespace std;vector<int> max_windows(const vector<int> &num,unsigned int size){vector<int> max_num;deque<int> index;for(unsigned int i=0;i<size;++i){if(!index.empty()&&num[i]>num[index.back()])index.pop_back();index.push_back(i);}for(unsigned int i=size;i<num.size();++i){max_num.push_back(num[index.front()]);while(!index.empty()&&num[i]>=num[index.back()]){index.pop_back();}if(!index.empty()&&index.front()<=(int)(i-size)){index.pop_front();}index.push_back(i);}max_num.push_back(num[index.front()]);return max_num;}int main(){int a[8]={2,1,3,2,6,2,5,1};vector<int> vec(a,a+8);vector<int> result;result=max_windows(vec,3);for(vector<int>::iterator iter=result.begin();iter!=result.end();++iter){cout<<*iter<<" ";}cout<<endl;system("pause");return 0;}

,6,6,6,5};

0 0
原创粉丝点击