题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
题解:
1,定义两个vector数组,array保存每次滑动窗口时的size个元素,maxnum保存最大值
2,通过*max_element(array.begin(), array.end())获取最大值
3,通过vector::iterator idx = array.begin(); array.erase(idx);删除数组头部元素
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size)
{
vector<int> maxnum;//保存最大值
vector<int> array;//保存每次窗口滑动后的数组
unsigned int length = num.size();//原num数组的长度
unsigned int k = 0;//记录遍历num的位置
if (size>length || size<1)
return maxnum;
while (k < size-1)
array.push_back(num[k++]);
for (int i=0; i<length-size+1; i++)
{
array.push_back(num[k++]);
maxnum.push_back(*max_element(array.begin(), array.end()));//保存当前滑动窗口内的最大值
vector<int>::iterator idx = array.begin();
array.erase(idx);//删除array中头部元素
}
return maxnum;
}
};