一、题目
二、思路及代码
暴力解法是依次往后滑动一位,然后比较窗口内的值。
我这里考虑:窗口每次往后移动一位,那么如果当前窗口的最大值max在窗口内部,那么再滑动到下一个窗口的时候,窗口内只有最新进来的一个元素没有跟max做过比较,只需要让他俩比较一下即可。通过这种方式能比暴力比较节省一点时间。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型vector
* @param size int整型
* @return int整型vector
*/
vector<int> maxInWindows(vector<int>& num, int size) {
// write code here
int i = 0;
int p = -1; //当前窗口中最大值所在的下标
int max = -10003;
vector<int> ans;
if(size==0) return ans;
for (i = 0; i < num.size() - size+1; i++) {
int n=i+size-1;
//如果窗口往后滑动一位,p还在窗口内,那么只需要再跟新进窗口的那个值比较一下就可以了
if (p >= i && p < n) {
if (max < num[n]) {
max = num[n];
p = n;
}
} else {
max=num[i];
for (int j = i+1; j < i+size; j++) {
if (num[j] > max) {
max = num[j];
p = j;
}
}
}
ans.push_back(max);
}
return ans;
}
};