算法记录Day 13 | 栈与队列part03
LeetCode 239. 滑动窗口最大值
题目链接:leetcode.cn/problems/sl…
题解
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> res;
vector<int> win;
for (int i = 0; i < nums.size(); i++) {
if (i >= k && i - k >= win.front()) {
win.erase(win.begin());
}
while (!win.empty() && nums[win.back()] <= nums[i]) {
win.pop_back();
}
win.push_back(i);
if (i >= k - 1) {
res.push_back(nums[win.front()]);
}
}
return res;
}
};
LeetCode 347.前 K 个高频元素
题目链接:leetcode.cn/problems/to…
题解
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> map;
struct comparison {
bool operator()(pair<int, int>& p1, pair<int, int>& p2) {
return p1.second > p2.second;
}
};
priority_queue<pair<int, int>, vector<pair<int, int>>, comparison> q;
for (int i = 0; i < nums.size(); i++) {
map[nums[i]] += 1;
}
for (auto& e : map) {
q.push(e);
if (q.size() > k) {
q.pop();
}
}
vector<int> res;
while (!q.empty()) {
res.push_back(q.top().first);
q.pop();
}
return res;
}
};