《漫画算法2》源码整理-7 第K大的数字
第K大的数字
public class KthLargestNumber {/*** 寻找第k大的元素* @param array 待调整的堆* @param k 第几大*/public static int findKthLargestNumber(int[] array, int k) {//1.用前k个元素构建最小堆buildHeap(array, k);//2.继续遍历数组,和堆顶比较for (int i = k; i < array.length; i++) {if (array[i] > array[0]) {array[0] = array[i];downAdjust(array, 0, k);}}//3.返回堆顶元素return array[0];}/*** 构建堆* @param array 待调整的堆* @param length 堆的有效大小*/private static void buildHeap(int[] array, int length) {// 从最后一个非叶子结点开始,依次下沉调整for (int i = (length - 2) / 2; i >= 0; i--) {downAdjust(array, i, length);}}/*** 下沉调整* @param array 待调整的堆* @param index 要下沉的结点* @param length 堆的有效大小*/private static void downAdjust(int[] array, int index, int length) {// temp保存父结点值,用于最后的赋值int temp = array[index];int childIndex = (2 * index) + 1;while (childIndex < length) {// 如果有右孩子,且右孩子小于左孩子的值,则定位到右孩子if (((childIndex + 1) < length) &&(array[childIndex + 1] < array[childIndex])) {childIndex++;}// 如果父结点小于任何一个孩子的值,直接跳出if (temp <= array[childIndex]) {break;}//无需真正交换,单向赋值即可array[index] = array[childIndex];index = childIndex;childIndex = (2 * childIndex) + 1;}array[index] = temp;}public static void main(String[] args) {int[] array = new int[] { 7, 5, 15, 3, 17, 2, 20, 24, 1, 9, 12, 8 };System.out.println(findKthLargestNumber(array, 5));}
}
《漫画算法2》源码整理-7 第K大的数字相关推荐
- 《漫画算法》源码整理-7
MyBitmap public class MyBitmap {//每一个word是一个long类型元素,对应64位二进制private long[] words;//bitmap的位数大小priva ...
- 《漫画算法》源码整理-5 排序算法
冒泡排序 import java.util.Arrays;public class BubbleSort {public static void sort(int array[]){int tmp = ...
- 《漫画算法》源码整理-6
判断链表有环 public class LinkedListCycle {/*** 判断是否有环* @param head 链表头节点*/public static boolean isCycle(N ...
- 《漫画算法》源码整理-4 大顶堆 小顶堆 优先队列
堆操作 import java.util.Arrays;public class HeapOperator {/*** 上浮调整* @param array 待调整的堆*/public static ...
- 《漫画算法》源码整理-3 二叉树遍历
二叉树前序 中序 后序 遍历 import java.util.Arrays; import java.util.LinkedList;public class BinaryTreeTraversal ...
- 《漫画算法》源码整理-2 数组 链表 队列
数组操作 public class MyArray {private int[] array;private int size;public MyArray(int capacity){this.ar ...
- 《漫画算法》源码整理-1 时间复杂度 空间复杂度
时间复杂度 public class TimeComplex {void eat1(int n){for(int i=0; i<n; i++){;System.out.println(" ...
- 算法设计--查找无序数组中第K大的数字
给出一个数组,要求查找出这个数组中按顺序排第K大的数字. 思路:利用快速排序的思想,把数组中的元素分治,并计算中间值的位置,如果是K,则这个数就是第K大的数字,如果比K小,那么再次利用快速排序分治中值 ...
- java计算机毕业设计漫画网站系统源码+系统+数据库+lw文档+mybatis+运行部署
java计算机毕业设计漫画网站系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计漫画网站系统源码+系统+数据库+lw文档+mybatis+运行部署 本源码技术栈: 项目 ...
最新文章
- 进程的同步、互斥以及PV原语
- 使用jvisualvm.exe 的Btrace插件监控应用程序
- Silverlight DataGrid超出列表高度时自动滚屏
- POJ 1679 The Unique MST(次小生成树)
- 【报错笔记】数据类型转换时报错:Request processing failed;nested exception is java.lang.NumberFormatException:...
- [react] 在React中声明组件时组件名的第一个字母必须是大写吗?为什么?
- k8s核心技术-Service概述_Service如何实现负载均衡_提供虚拟IP_以及Po的IP注册和发现---K8S_Google工作笔记0031
- tcp 压力 测试 软件,强大的TcpServer压力测试工具及源码(附突破连接限制的方法和工具)...
- 《最受欢迎的男友职业排行榜Top10》
- 第1节 中华人民共和国网络安全法
- 抖音互关源码 E4A源码含数据库后台程序搭建可用
- 不得不知 云计算入门必备的60条术语
- 什么是视频比特率:完整指南
- 【2022-05-31】JS逆向之易企秀
- Wordcount()--ASP字数计算函数
- Echart + 百度地图实现区域聚合(Vue版)
- Spring Boot 参考文档
- 仓库码放要求_仓库管理制度规则
- Kafka之四:Kafka与Streaming集成
- iOS - CoreData了解和简单应用
热门文章
- Docker源码分析(五):Docker Server的创建
- 原理+实践,Kafka MirrorMaker使用与性能调优全解析
- 一个完整的微服务系统,应该包含哪些功能?--转
- struts深入原理之RequestProcessor与xml
- 开发团队如何完成一个项目?
- 以太坊发token教程
- 深度 | 宽客玩转华尔街:谁才是新的“华尔街之王”?
- 实现主成分分析和白化
- 深入理解分布式技术 - 先更新数据库,还是先更新缓存
- Redis进阶-分布式存储 Sequential partitioning Hash partitioning