class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if (nums.empty() || k > nums.size()) {
return {};
}
vector<int> result;
// 这里存储的下标, 一定注意
deque<int> q;
int n = nums.size();
for (int i = 0; i < n; i++) {
// delete elements not in window
while (!q.empty() && q.front() <= i - k) {
q.pop_front();
}
// 在这里犯了可怕的错误, 直接拿数字和下标进行比较, 难以察觉
while (!q.empty() && nums[i] > nums[q.back()]) {
q.pop_back();
}
q.push_back(i);
if (i >= k - 1) {
result.push_back(nums[q.front()]);
}
}
return result;
}
};
maxSlidingWindow 单调队列应用
最新推荐文章于 2024-10-01 16:00:32 发布