查找最小的k个元素(数组)
来源:互联网 发布:国外游戏源码网站 编辑:程序博客网 时间:2024/05/16 13:42
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
1 在数据量不大的情况下,排序
2 维护一个最小k 的数组 ,复杂度 为 o(k * N)
3 为一个最小K个数的最大堆 o(log2 k * N)
/*查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。*//*思路 : 来一个数据处理一个 ,当来的数据量小于K 时 ,全部处理成最大堆, 然后之后来的,必须要小于最大堆的的最大值,才可以入堆,此时 只需更新 根节点,再调整堆。*/# include<stdio.h># include<stdlib.h>const int K = 5 ;//这里可以修改 const int MAXN = 1000;int max_heap[K+1] ;//维护一个 最大堆 int end ,maxPos;void swap(int &a ,int &b){ int t = a;a = b ; b = t;}int FindMax(){ int maxPos = 1; for(int i = 2 ;i <= K ; i ++) if(max_heap[i] >max_heap[maxPos] ) maxPos = i; return maxPos;}/*将数据插入到 数组中 插入排序的思想*/void insertMinHeap(int mdata){ int i,child = 0; if(end == K +1 ) // 如果堆满 { /* int mmaxPos = FindMax();*/ if(mdata >= max_heap[1] ) // 如果大于等于该堆的最大值 不做任何改变 return ; max_heap[1] = mdata; for(i = 1 ; i*2 <= K ;i = child) { child = 2*i ; if((i*2 +1 <= K && max_heap[i*2] < max_heap[i*2+1]) )//返回最大孩子的下表 child ++; if(max_heap[i] < max_heap[child]) swap(max_heap[i] ,max_heap[child]); else { break; } } return ; } max_heap[end ++] = mdata; for(i = end -1 ; i > 1 ; i /=2) { if(max_heap[i] > max_heap[i/2]) swap(max_heap[i] ,max_heap[i/2]); else { break; } } }int main(){ int n,data; freopen("in.txt","r",stdin);//如果想从文件输入 将这句注释掉 1234 1 2 3 4 5 6 7 8 9 10 11 end = 1; while(scanf("%d",&data)!=EOF) // 如果是手工输入 结束输入 按 ctrl + z { insertMinHeap(data); } for(int i = 1 ; i <= K ; i ++) // printf("%d ",max_heap[i]); printf("\n"); return 0;}
0 0
- 查找最小的k个元素(数组)
- 5.查找最小的k个元素(数组)
- No5、查找最小的 k 个元素(数组)
- 5.查找最小的k个元素(数组)
- 查找最小的k个元素(数组)
- 微软试题:查找数组中最小的k个元素
- 在一个数组中查找最大的K个元素或者最小的K个元素
- 每天一算法(查找最小的k个元素(数组))
- 微软面试100道之 5 查找最小的k个元素(数组)
- 5. 微软面试题: 查找最小的k个元素(数组)
- 查找最小的k个元素
- 查找最小的k个元素
- 查找最小的 k个元素
- 查找最小的 K 个元素
- 查找最小的k个元素
- 5.查找最小的k个元素
- 查找最小的k个元素
- 查找最小的k个元素
- 武汉华嵌-嵌入式培训专家笔试题目
- 标题 随便写阿什利的客服经理开始的减肥死了快捷方式来得快
- 利用VMProtect sdk和ASProtect sdk加密delphi程序
- CodeForces 451B 模拟
- SDUT--枚举(删数问题)
- 查找最小的k个元素(数组)
- 几种简单的嵌入式linux文件系统
- jquery动态添加节点
- tinyos 编译运行 telosb 在 Install application to the specified mote出现问题
- Eclipse下编辑properties文件的插件 【国际化插件】
- Flex HTTPService 跨域访问
- spring事务管理几种方式(转)
- 14-hibernate分布式缓存、 中央缓存
- 备忘录模式分析、结构图及基本代码