【算法】使用大根堆,解决top_k问题
来源:互联网 发布:研究生论文数据造假 编辑:程序博客网 时间:2024/05/24 22:45
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list=new ArrayList<Integer>(); if(input==null || input.length<k||input.length<=0 ){ return list; } for(int len=(input.length-1)/2; len>=0; len--){ adjustBigHeap(input,len,input.length-1);//初始化建大根堆 } int tmp; for(int i=input.length-1; i>0; i--){ //第一个元素交换到最后,重新调整为大根堆 tmp=input[0]; input[0]=input[i]; input[i]=tmp; adjustBigHeap(input,0,i-1); } for(int j=0; j<k; j++){ list.add(input[j]); } return list; } public static void adjustBigHeap(int[] input, int begin, int length){ int temp; int child; for(temp=input[begin]; 2*begin+1<=length; begin=child){//从begin元素向下查找 child=2*begin+1; if(child<length && input[child]<input[child+1]){//找到孩子中大的 child++; } if(input[child]>temp){ input[begin]=input[child]; }else{ break; } } input[begin]=temp; } public static void main(String[] args) { int arr[]={2,3,5,6,1,4,7,8,9}; ArrayList<Integer>a= GetLeastNumbers_Solution(arr,4); System.out.println(a); }
阅读全文
0 0
- 【算法】使用大根堆,解决top_k问题
- top_k问题
- 快排算法,以及 top_k应用
- 使用非递归算法解决迷宫问题
- 使用遗传算法解决TSP问题
- 使用 STL 辅助解决算法问题
- 算法第三节:使用递归算法解决“阶乘”问题
- 使用递归算法解决字符的组合问题
- 使用隐马尔科夫模型Viterbi算法解决词性标注问题
- 使用matlab实现遗传算法解决飞行员侦查问题
- 使用遗传算法解决多变量函数优化问题!
- c++ 使用蚁群算法解决TSP问题。
- C++ 使用蚁群算法解决TSP问题 续
- 最大流问题 (使用遗传算法解决 --Python 实现)
- 5*.使用模拟退火算法解决“费马点”问题
- 算法基础-使用循环不变式解决插入排序问题
- 算法——使用递归解决组合问题
- 算法问题[待解决]
- 关于thinkphp 迁移到linux后500错误的问题解决
- 25:求特殊自然数
- unable to load dynamic library php_redis.dll--in unknown on line 0
- 1TensorFlow实现自编码器-1.1自动编码器基本原理
- 浅谈模块化加载的实现原理
- 【算法】使用大根堆,解决top_k问题
- LeetCode---Judge Route Circle
- 那些年,今天
- 如何将3d文件在网页中显示(webGL,three.js)
- webservice如何生成客户端
- assets目录下资源拷贝到指定目录
- 欢迎使用CSDN-markdown编辑器
- 以太坊的Ethash算法
- MySQL常用命令