堆--数组中第K大元素

如果对于堆不是太认识,请点击:堆的初步认识-CSDN博客

解题思路:

/*** <h3>求数组中第 K 大的元素</h3>* <p>* 解体思路* <ol>*     1.向小顶堆放入前k个元素*     2.剩余元素*         若 <= 堆顶元素, 则略过*         若 > 堆顶元素, 则替换堆顶元素*     3.这样小顶堆始终保留的是到目前为止,前K大的元素*     4.循环结束, 堆顶元素即为第K大元素* </ol>*/

小顶堆(可删去用不到代码)

class MinHeap {int[] array;int size;public MinHeap(int capacity) {array = new int[capacity];}private void heapify() {for (int i = (size >> 1) - 1; i >= 0; i--) {down(i);}}public int poll() {swap(0, size - 1);size--;down(0);return array[size];}public int poll(int index) {swap(index, size - 1);size--;down(index);return array[size];}public int peek() {return array[0];}public boolean offer(int offered) {if (size == array.length) {return false;}up(offered);size++;return true;}public void replace(int replaced) {array[0] = replaced;down(0);}private void up(int offered) {int child = size;while (child > 0) {int parent = (child - 1) >> 1;if (offered < array[parent]) {array[child] = array[parent];} else {break;}child = parent;}array[child] = offered;}private void down(int parent) {int left = (parent << 1) + 1;int right = left + 1;int min = parent;if (left < size && array[left] < array[min]) {min = left;}if (right < size && array[right] < array[min]) {min = right;}if (min != parent) {swap(min, parent);down(min);}}// 交换两个索引处的元素private void swap(int i, int j) {int t = array[i];array[i] = array[j];array[j] = t;}
}

题解

public int findKthLargest(int[] numbers, int k) {MinHeap heap = new MinHeap(k);for (int i = 0; i < k; i++) {heap.offer(numbers[i]);}for (int i = k; i < numbers.length; i++) {if(numbers[i] > heap.peek()){heap.replace(numbers[i]);}}return heap.peek();
}

注意哦:求数组中的第 K 大元素,使用堆并不是最佳选择,可以采用快速选择算法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125239.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty 4.1.98.Final 发布

Netty 4.1.98 稳定版已发布。Netty 是一个异步事件驱动的网络应用框架&#xff0c;主要用于可维护的高性能协议服务器和客户端的快速开发。 此版本还原了上一版本中所做的更改&#xff0c;这些更改导致 HTTP header 验证比所需的更严格 (#13615)。除此之外&#xff0c;当使用 n…

MySQL到TiDB:Hive Metastore横向扩展之路

作者&#xff1a;vivo 互联网大数据团队 - Wang Zhiwen 本文介绍了vivo在大数据元数据服务横向扩展道路上的探索历程&#xff0c;由实际面临的问题出发&#xff0c;对当前主流的横向扩展方案进行了调研及对比测试&#xff0c;通过多方面对比数据择优选择TiDB方案。其次分享了整…

Win11 安装 Vim

安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Ru7HhTSotz9mteHug-Yhpw?pwd6666 提取码&#xff1a;6666 双击安装包&#xff0c;一直下一步。 配置环境变量&#xff1a; 先配置系统变量中的path&#xff1a; 接着配置用户变量&#xff1a; 在 cmd 中输入…

安装cad显示找不到msvcp140.dll怎么解决?靠谱的msvcp140.dll丢失的解决方法分享

在安装 CAD 软件时&#xff0c;出现找不到 msvcp140.dll 的困扰&#xff0c;让许多用户感到十分沮丧。msvcp140.dll 是 Visual C Redistributable for Visual Studio 2015 的运行库文件&#xff0c;对于 CAD 软件的正常运行至关重要。因此&#xff0c;解决这个问题是当务之急。…

【Python入门】元组与字符串

文章目录 前言一、元组&#xff08;Tuples&#xff09;1.1 元组的定义1.2 元组的特性&#xff1a;1.3 示例 1: 创建和访问元组1.4 示例 2: 元组的不可变性1.5 元组的常用函数操作&#xff1a;len() - 返回元组中元素的个数。index() - 查找指定元素在元组中的索引。count() - 统…

Java项目:高仿12306

github地址&#xff1a;nageoffer/12306: &#x1f525; 官方推荐 &#x1f525; 大学春招、秋招、应届项目&#xff0c;SpringBoot3 Java17 SpringCloud Alibaba Vue3 等技术架构&#xff0c;完成高仿铁路 12306 用户 抢票 订单 支付服务&#xff0c;帮助学生主打就业的…

ChatGPT 在机器学习中的应用

办公室里一个机器人坐在人类旁边&#xff0c;Artstation 上的流行趋势&#xff0c;美丽的色彩&#xff0c;4k&#xff0c;充满活力&#xff0c;蓝色和黄色&#xff0c; DreamStudio出品 一、介绍 大家都知道ChatGPT。它在解释机器学习和深度学习概念方面也非常高效&#xff0c;…

订单型批发制造企业经营分析123个指标大全(ODOO15/16)

ODOO-ERP搭建完成之后&#xff0c;我们重点是帮客户建立经营分析能力&#xff0c;以下是针对订单型企业的经营分析指标&#xff0c;涵盖业务运营的监控、资产构成、利润、盈亏点计算、资产运营效率等各方面&#xff0c;并且持续完善​。 有些企业不重视&#xff0c;觉得自己企业…

番外3:下载+安装VMware(前期准备)

step1: 查看自己笔记本电脑配置&#xff1b; step2: 下载并安装VMware&#xff08;下载地址www..kkx.net/soft/16841.html&#xff09;这里选择本地普通下载&#xff1b; step3: 安装VMware过程中需要填写密钥&#xff08;本人用的最后一个&#xff09;; #UU54R-FVD91-488PP-7N…

Python的函数

近期遇到了一个没怎么看懂的Python函数的形式。 def twoSum(self, nums: List[int], target: int) -> List[int]: 后来上网查了资料。

S32K144 GPIO编程

前面的文章介绍了如何在MDK-Keil下面进行S32K144的开发&#xff0c;下面就使用该工程模板进行GPIO LED的编程试验。 1. 开发环境 S32K144EVB-Q100开发板MDK-Keil Jlink 2. 硬件连接 S32K144EVB-Q100开发板关于LED的原理图如下&#xff1a; 也就是具体连接关系如下&#xf…

【C语言】循环结构程序设计(第二部分 -- 习题讲解)

前言:昨天我们学习了C语言中循环结构程序设计&#xff0c;并分析了循环结构的特点和实现方法&#xff0c;有了初步编写循环程序的能力&#xff0c;那么今天我们通过一些例子来进一步掌握循环程序的编写和应用。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &am…