当前位置: 首页 > news >正文

堆:数组中的第K个最大数

题目描述:给定一个整数数组,返回数组中的第K个最大数。

示例 1:

输入: [3,2,1,5,6,4],k = 2
输出: 5
说明:降序排序之后:[6,5,4,3,2,1] =》第2个最大数是5

示例 2:

输入: [3,2,3,1,2,4,5,5,6],k = 4
输出: 4
说明:降序排序之后:[6,5,5,4,3,3,2,2,1] =》第4个最大数是4

题解1:排序求解

class Solution {public int findKthLargest(int[] nums, int k) {// 方法一:先排序,返回nums[n-k]// [98,1,0,23,24] => [0,1,23,24,98]Arrays.sort(nums); // 默认升序;k=2;return 24return nums[nums.length - k];}
}

题解2:最小堆

维护个数为K的最小堆,堆顶元素就是第K个最大数

class Solution {public int findKthLargest(int[] nums, int k) {// 方法二:最小堆求解PriorityQueue<Integer> heap = new PriorityQueue<Integer>((n1, n2) -> n1 - n2); for (int n : nums) {heap.add(n);if (heap.size() > k) {heap.poll();}}// 最小堆堆顶就是答案return heap.poll();}
}

题解3:快速选择(三路分区)

class Solution {public int findKthLargest(int[] nums, int k) {// 方法三:基于快排List<Integer> numList = new ArrayList<>();for (int num : nums) {numList.add(num);}return quickSelect(numList, k);}int quickSelect(List<Integer> nums, int k) {// 随机选择基准数Random rand = new Random();int pivotNum = nums.get(rand.nextInt(nums.size()));// 将大于、小于、等于pivotNum的元素划分至big,small,equal中List<Integer> big = new ArrayList<>();List<Integer> small = new ArrayList<>();List<Integer> equal = new ArrayList<>();for (int num : nums) {if (num > pivotNum) {big.add(num);} else if (num < pivotNum) {small.add(num);} else {equal.add(num);}}// 第k大元素在big中,递归划分// big包含所有大于pivotNum的元素,这些元素在整体排序中位于前big.size()个位置// 如果big.size()=5,那么第1~5大的数都在big中if (k <= big.size()) {return quickSelect(big, k);}// 第k大元素在small中,递归划分// big.size() + equal.size():这个值表示大于等于pivotNum的元素个数// 如果k > 这个值,说明第K大元素比pivot小,在small中if (big.size() + equal.size() < k) {// 在small中药重新计算k值,因为small中的最大元素在整个数组中排第(nums.size() - small.size() + 1)大return quickSelect(small, k - (big.size() + equal.size()));}// 第k大元素在equal中,直接返回return pivotNum;}
}

练习地址:https://leetcode.cn/problems/kth-largest-element-in-an-array/?envType=study-plan-v2&envId=top-100-liked

http://www.dtcms.com/a/462750.html

相关文章:

  • 如何添加网站 ico图标小游戏开发需要多少钱
  • printf输出乱码的解决办法
  • 汕头做网站优化的公司两个wordpress
  • 网站域名在哪里如何建立一个免费的网站
  • 重庆交通建设监理协会网站建设银行招标网站
  • 温州企业自助建站系统虚拟主机怎么设计网站吗
  • 网站备案表是什么纪检监察网站建设背景
  • FDC1004学习笔记二:读写数据
  • 双剑合璧:Microsoft Agent Framework——Python与.NET的AI智能体协奏曲
  • 行动比空想更有力量。哪怕只是一小步,也是通向目标的开始。
  • 学习笔记--分页查询 条件分页查询
  • 东莞网络推广网站部门网站建设管理
  • 流式推理 vs 训练模式详细对比
  • 一个酷炫的烟花网站
  • 【AES加密专题】2.AES头文件详解
  • 腾讯员工月薪多少郴州网站seo
  • 网站建设培训个人网络服务器
  • STM32H743-ARM例程14-FATFS
  • 具有营销型网站的公司有哪些网页设计个人简介代码
  • 网站的交互体验网站备案单位的联系方式
  • 百度logo在线设计生成器seo关键词推广公司
  • 网站开发维护公司前端很难学吗
  • 为你的Hugo博客站创建WordCloud标签云
  • .net网站开发免费教程重庆招聘信息最新招聘2021
  • 接口测试总结
  • 大模型部署基础设施搭建 - ComfyUI
  • 做拍客哪个网站好wordpress 功能菜单
  • 成都 广告公司网站建设卡盟网站顶图怎么做
  • 找别人做网站需要什么信息安徽省建设行业安全协会网站
  • 成立做网站的公司浙江建设信息港官网证书查询