1.改进的暴力法。
class Solution {
public:
int MaxinW(const vector<int>& num, int low, int high)
{
int MaxVal = INT_MIN;
for (int j = low; j <= high; j++)
MaxVal = max(num[j], MaxVal);
return MaxVal;
}
vector<int> maxInWindows(const vector<int>& num, unsigned int size)
{
vector<int>res;
int len=num.size();
if (len <= 0||size<=0||size>len)return res;
int MaxVal = MaxinW(num, 0, size - 1); res.push_back(MaxVal);
for (int low = 1, high = size; high < len; low++,high++)
{
if (num[high] >= MaxVal)
MaxVal = num[high];
if (num[low - 1] == MaxVal)
MaxVal = MaxinW(num, low, high);
res.push_back(MaxVal);
}
return res;
}
};
2.双端队列
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size)
{
vector<int>res;
deque<int>s;
int len=num.size();
if (len <= 0||size<=0||size>len)return res;
for (int i = 0;i < len; i++)
{
while (!s.empty() && num[s.back()] <= num[i])
s.pop_back();
while (!s.empty()&&i - s.front() + 1>size)
s.pop_front();
s.push_back(i);
if (i + 1 >= size)
res.push_back(num[s.front()]);
}
return res;
}
};