struct CompareMap {
bool operator()(const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) const {
return lhs.second < rhs.second;
}
};
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
priority_queue<pair<int, int>, vector<pair<int, int>>, CompareMap> prior_queue;
vector<int> result;
for (int i = 0; i < nums.size(); i++)
{
// 维护着最大值
prior_queue.push({ i,nums[i] });
// 滑动窗口形成
if (i >= k - 1) {
// 添加最大值
result.push_back(prior_queue.top().second);
// 如果第一个是最大值(索引) 考虑不全,当前只要不满足都要剔除
// i - k是当前的最小值 只要前边有小于 i-k的都要删除
// 这里没有限制,只许保证当前的最大值的索引一定小于滑动窗口的左边
while (prior_queue.size() > 0 && prior_queue.top().first <= i - k + 1) {
//移除掉当前的值
prior_queue.pop();
}
}
}
return result;
}
};
priority_queue 默认从大到小排序 ,先排第一个,后排第二个
struct CompareMap {
bool operator()(const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) const {
return lhs.second < rhs.second;
}
};
自定义 小于是 从大到小排序。