308 字
2 分钟
算法 : 堆

二叉堆 - OI Wiki

手写堆:

void up(int x) {
while (x > 1 && h[x] > h[x / 2]) {
std::swap(h[x], h[x / 2]);
x /= 2;
}
}
void down(int x) {
while (x * 2 <= n) {
int t = x * 2;
if (t + 1 <= n && h[t + 1] > h[t]) t++;
if (h[t] <= h[x]) break;
std::swap(h[x], h[t]);
x = t;
}
}
void build_heap_1() {
for (int i = 1; i <= n; i++) up(i);
}
void build_heap_2() {
for (int i = n; i >= 1; i--) down(i);
}

基础#

class KthLargest {
priority_queue<int, vector<int>, greater<int>> pque;
int k;
public:
KthLargest(int k, vector<int>& nums) : k(k) {
for (int x : nums) {
pque.push(x);
if (pque.size() > k) {
pque.pop();
}
}
}
int add(int val) {
pque.push(val);
if (pque.size() > k) {
pque.pop();
}
return pque.top();
}
};
算法 : 堆
https://dingfengbo.vercel.app/posts/算法/堆/
作者
Eureka
发布于
2026-05-06
许可协议
CC BY-NC-SA 4.0