题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口的最大值,例如如果输入数组是
{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};