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

【力扣】数组中的第K个最大元素

一、题目描述

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:

  • 1 <= k <= nums.length <= 105
  • -104 <= nums[i] <= 104

题目链接:. - 力扣(LeetCode)

 二、解题思路

1、随机选择基准元素

2、根据基准元素将数组分为三部分:[l, left](该部分小于基准元素key)、[left + 1, right - 1](等于基准元素key)、[right, r](大于基准元素key)。

3、计算每部分所包含的元素个数,分别为a 、b = right - left - 1、 c = r - right + 1;

4、分情况讨论:

三、代码

class Solution {public int findKthLargest(int[] nums, int k) {return qsort(nums, 0, nums.length-1, k);}private int qsort(int[] nums, int l, int r, int k) {if(l == r) {return nums[l];}//随机选择基准元素int key = nums[new Random().nextInt(r-l+1) + l];//根据基准元素将数组划分为三组int left = l-1, right = r+1, i = l;while(i < right) {if(nums[i] < key) {swap(nums, ++left, i++);} else if(nums[i] == key) {i++;} else {swap(nums, --right, i);}}//分情况讨论int b = right - left - 1, c = r - right + 1;if(c >= k) {return qsort(nums, right, r, k);} else if(b + c >= k) {return key;} else {return qsort(nums, l, left, k - b - c);}}private void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

 

http://www.lryc.cn/news/395656.html

相关文章:

  • WTM的项目中EFCore如何适配人大金仓数据库
  • 互联网3.0时代的变革者:华贝甄选大模型创新之道
  • Tomcat的安全配置
  • [笔记] 卷积 - 01 变速箱需要放置多少个加速度传感器?
  • Maya崩溃闪退常见原因及解决方案
  • 编码与梦想:我的CSDN创作5周年
  • Vue2 基础十Vuex
  • 【大模型】驾驭未知领域:LLM如何处理域外或无意义的提示
  • Docker容器 为MySQL创建新用户和授权
  • openssh9.8p1更新 修复漏洞(CVE-2024-6387)
  • 超市收银系统源码
  • word 使用手册
  • vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素
  • JRE、JVM、JDK分别是什么。
  • 台灯护眼是真的吗?台灯怎么选对眼睛好?一文带你读懂!
  • 【学术会议征稿】第五届计算机工程与智能控制学术会议(ICCEIC 2024)
  • 【Golang】slice切片
  • 开源网安模糊测试平台SFuzz全新升级,从标准到实践助力车企安全出海
  • Go bytes包
  • 将List切割为多个指定长度的多个List
  • 【实战】mysql加密函数AES_ENCRYPT无缝迁移到磐维2.0的加密函数MY_ENCRYPT_AES128
  • 使用YOLO训练好自己的模型并持续训练【教程二】
  • STC32G/F/8H通用无刷电机驱动板
  • java Web 优秀本科毕业论文系统用eclipse定制开发mysql数据库BS模式java编程jdbc
  • SAP_MMABAP模块_MM60物料清单通过增强新增物料描述
  • lodash中flush的使用(debounce、throttle)
  • 设计高并发秒杀系统:保障稳定性与数据一致性
  • 从源码到成品:直播电商与短视频带货APP的开发之路
  • C++OCR API减轻人们文字录入的负担
  • web安全基础名词概念