数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++

数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++
遍历numbers,取出首个不同值,查找numbers中等于该值的个数cnt,把2cnt与number.size比较即可数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++
数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++
input排序,前k个弹出,放在结果末尾O(n)数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++大根堆
创建一个大小为k的数据容器来存储最小的k个数字
从输入的n个整数中读入一个数a
容器中已有的数字少于k个,则直接把a放入容器
容器中已有k个数字满了,找出容器中k个数的最大值m,与a比较
m<a替换m=a
m>a抛弃a
由于heap已排列好,只需弹除第k+1个元素如25,26行所示
heap值从大到小加入结果,反转即可
O(nlogn)
数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++

数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++
前n个小数是大根堆 后n个或n-1个大数是小根堆
总数2n偶取大小堆头结点平均或2n-1奇取大堆头节点数组中出现次数超过一半的数字 最小的k个数 数据流中位数c++