寻找最大的K个数
来源:互联网 发布:淘宝大屏的轮播图 编辑:程序博客网 时间:2024/06/11 02:14
/** * 寻找最大的K个数 * @author Administrator * 利用最小堆来存储前K个数,堆顶为最小数,将X于堆顶元素比较,若大于则将X插入堆 * 然后更新堆 */public class FindMaxKNum {public int[] find(int[] heap,int[] arr){for(int i=heap.length;i<arr.length;i++){refreshHeap(arr[i], heap, heap.length);}return heap;}/** * 更新堆操作 */private void refreshHeap(int x,int[] heap,int k){//如果x>heap[0]则更新堆if(x>heap[0]){heap[0] = x;//节点pint p=0;while(p<k){//节点左子数int q = 2*p+1;//如果q大于总数k则推出if(q>k)break;//如果右节点q+1>左节点q则交换节点指针,保证q始终指向大的节点;q<k-1表示最后2个元素交换位置与否不影响结果if((q<k-1)&&(heap[q+1]<heap[q]))q = q + 1;//如果p节点大于q节点表明子节点大于当前节点,则更新两个节点的值if(heap[q]<heap[p]){int t = heap[p];heap[p] = heap[q];heap[q] = t;p = q;}else{break;}}}}}
@Test public void findMaxKNum(){ FindMaxKNum fmk= new FindMaxKNum(); int[] arr = {9,3,5,1,6,4,7,0,2,8,45,15,99,12,14,3,4,2,44,23,4}; int[] heap = {1,3,5,9}; int[] ar = fmk.find(heap, arr); for(int i=0;i<ar.length;i++){ System.out.println(ar[i]); } }
0 0
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的k个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的k个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的K个数
- 寻找最大的k个数
- 常量指针、指针常量、野指针、空指针概念解析
- android 获取图片绝对地址
- CSS3中的transform变形
- myeclipse使用maven构建struts2项目详解
- Android_02_文件访问权限(待更新)
- 寻找最大的K个数
- Java之静态内部类(static class)
- 详解JS位置、宽高属性之一:offset系列
- Monkey工具
- madCollection for bcb hook调用
- jQuery $.each用法
- 机器视觉--相机
- 对HibernateDaoSupport进行二次封装:hibernate增删改查组件
- iOS - Install app to simulator