#include <iostream>
#include <queue>
using namespace std;
void dynamicMedian(int* arr, int n) {
priority_queue<int> maxHeap; // 大根堆,存储较小的一半数字
priority_queue<int, vector<int>, greater<int>> minHeap; // 小根堆,存储较大的一半数字
for (int i = 0; i < n; i++) {
if (maxHeap.empty() || arr[i] <= maxHeap.top()) {
maxHeap.push(arr[i]);
} else {
minHeap.push(arr[i]);
}
// 平衡两个堆的大小
if (maxHeap.size() > minHeap.size() + 1) {
minHeap.push(maxHeap.top());
maxHeap.pop();
} else if (minHeap.size() > maxHeap.size()) {
maxHeap.push(minHeap.top());
minHeap.pop();
}
// 输出中位数
if (i % 2 == 0) {
cout << maxHeap.top() << " "; }
}
cout << endl;
}
int main() {
int arr[] = {34, 123, 123, 8};
int n = sizeof(arr) / sizeof(arr[0]);
dynamicMedian(arr, n);
return 0;
}

被折叠的 条评论
为什么被折叠?



