查找最小的k 个元素
来源:互联网 发布:格灵深瞳 知乎 衰败 编辑:程序博客网 时间:2024/06/06 01:45
查找最小的k 个元素
题目:输入n 个整数,输出其中最小的k 个。
例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。
ANSWER:
This is a very traditional question...
O(nlogn): cat I_FILE | sort -n | head -n K
O(kn): do insertion sort until k elements are retrieved.
O(n+klogn): Take O(n) time to bottom-up build a min-heap. Then sift-down k-1 times.
So traditional that I don’t want to write the codes...
Only gives the siftup and siftdown function.
/**
*@param i the index of the element in heap a[0...n-1] to be sifted up
void siftup(int a[], int i, int n) {
while (i>0) {
int j=(i&1==0 ? i-1 : i+1); //找到兄弟节点
int p=(i-1)>>1;//找到父亲节点
if (j<n && a[j]<a[i]) i = j;//i为兄弟中较小的节点
if (a[i] < a[p]) swap(a, i, p);//向上筛选
i = p;
}
}
void siftdown(int a[], int i, int n) {
while (2*i+1<n){
int l=2*i+1;
if (l+1<n && a[l+1] < a[l]) l++;
if (a[l] < a[i]) swap(a, i, l);
i=l;
}
}
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的 k个元素
- 查找最小的 K 个元素
- 查找最小的k个元素
- 5.查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 5.查找最小的k个元素
- 查找最小的k个元素(数组)
- 查找最小的K个元素
- 查找最小的K个元素
- 查找最小的k个元素
- 查找最小的k个元素[算法]
- 查找最小的k 个元素
- 查找最小的k个元素
- 查找最小的k个元素
- Numpy数组
- C语言学习之联合、枚举
- ext4的Extent解析
- 函数的递归调用
- 不可表示的数——庞果网
- 查找最小的k 个元素
- Numpy的数组拼接
- 集群与分布式的区别
- 【机器学习实践(2)】K近邻(KNN)模型
- ContentProvider的使用
- Class.forName() 和 ClassLoader.loadClass()的区别
- 最简单的实现SD卡读写权限方法 [复制链接]
- 从相机、相册获取照片或图片
- android系统中修改sd卡挂载目录