1. 数据流中的第 K 大元素
代码实现:
思路:创建一个大小为 k 的小顶堆,堆顶元素就是第 K 大元素
typedef struct { int *__data, *data; int size; int n; } KthLargest; #define swap(a, b) { \ __typeof(a) __c = (a); \ (a) = (b); \ (b) = __c; \ } // 从1开始存储,根结点下标为1 #define FATHER(i) ((i) / 2) #define LEFT(i) ((i) * 2) #define RIGHT(i) ((i) * 2 + 1) // 向上调整(非递归) void up_update(int *data, int i) { while (i > 1 && data[i] < data[FATHER(i)]) { swap(data[i], data[FATHER(i)]); i = FATHER(i); } } // 向下调整 void down_update(int *data, int i, int n) { while (LEFT(i) <= n) { int ind = i, l = LEFT(i), r = RIGHT(i); if (data[l] < data[ind]) { ind = l; } if (r <= n && data[r] < data[ind]) { ind = r; } if (ind == i) { break; } swap(data[i], data[ind]);