题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
《较难》就这啊😅我以为多难呢
思路:拿一个队列装每一轮窗口的值,并且考虑上一个窗口的最大值是否被排出去,如果是,则重新比较队列里的值,如果不是,则只需比较新进来的值和上一个窗口的最大值,并更新最大值。
class Solution { public: int q_max(vector<int> arr) { int max = arr[0]; for (int i = 0; i < arr.size(); i++)max = (arr[i] > max) ? arr[i] : max; return max; } vector<int> maxInWindows(vector<int>& num, int size) { vector<int> res; if (!size || size > num.size()) return res; vector<int> query; for (int i = 0; i < size; i++) query.push_back(num[i]); int pre; for (int i = size - 1; i < num.size(); i++) { if (i == size - 1) { res.push_back(q_max(query)); } else { pre = query.front(); query.erase(query.begin()); query.push_back(num[i]); if (pre != res.back()) res.push_back((res.back() > query.back()) ? res.back() : query.back()); else res.push_back(q_max(query)); } } return res; } };