1、滑动窗口最大值
#include <iostream>
#include <deque>
using namespace std;
class Solution {
private:
class MyQueue {
public:
deque<int> que;
void pop(int value) {
if (!que.empty() && value == que.front()) {
que.pop_front();
}
}
void push(int value) {
while (!que.empty() && value > que.back()) {
que.pop_back();
}
que.push_back(value);
}
int front() {
return que.front();
}
};
public:
vector<int> maxSlidingWindow(vector<int> &nums, int k) {
MyQueue que;
vector<int> result;
for (int i = 0; i < k; ++i) {
que.push(nums[i]);
}
result.push_back(que.front());
for (int i = k; i < nums.size(); ++i) {
que.pop(nums[i - k]);
que.push(nums[i]);
result.push_back(que.front());
}
return result;
}
};
int main() {
vector<int> nums = {1, 3, -1, -3, 5, 3, 6, 7};
int k = 3;
Solution solution;
for (auto ele: solution.maxSlidingWindow(nums, k)) {
cout << ele << " ";
}
cout << endl;
}
2、前 K 个高频元素
#include <iostream>
#include <queue>
using namespace std;
class Solution {
public:
class mycomparison {
public:
bool operator()(const pair<int, int> &lhs, const pair<int, int> &rhs) {
return lhs.second > rhs.second;
}
};
vector<int> topKFrequent(vector<int> &nums, int k) {
unordered_map<int, int> umap;
for (int num: nums) {
umap[num]++;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pri_que;
for (auto &it: umap) {
pri_que.emplace(it);
if (pri_que.size() > k) {
pri_que.pop();
}
}
vector<int> result(k);
for (int i = k - 1; i >= 0; --i) {
result[i] = pri_que.top().first;
pri_que.pop();
}
return result;
}
};
int main() {
vector<int> nums = {1, 1, 1, 2, 2, 3};
int k = 2;
Solution solution;
for (auto ele: solution.topKFrequent(nums, k)) {
cout << ele << " ";
}
cout << endl;
}