给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为...
题目介绍
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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]}。
题目分析
其实这道题目就是一个简单的滑窗遍历,但是要遵考虑到几种情况,当滑窗窗口size值为0或大于输入数组长度时,此时返回一个空的结果数组,当输入数组为空时,同样返回一个空的数组,当输入数组的长度大于等于滑窗size时,此时正常遍历即可,具体实现请见源代码。
源代码
class Solution {
public:vector<int> maxInWindows(const vector<int>& num, unsigned int size){vector<int> nums;if(num.size()==0){return nums;}else if(num.size()<size||size==0){return nums;}else{for(int i=0;i<=num.size()-size;i++){int max=num[i];for(int j=i;j<i+size;j++){if(max<num[j]){max=num[j];}}nums.push_back(max);}return nums;}}
};