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

力扣HOT100之堆:215. 数组中的第K个最大元素


这道题是大厂面试的高频面试题,昨天面网易互娱的时候被问到了这道题,无论是手撕快速排序代码还是面试口头描述思路,我们都需要熟练掌握快速排序的写法,在面试中为了求稳,我们需要掌握最简单,最易记的一种实现方式,这里我推荐这个博主的快慢指针方法,通俗易懂,牢记这种方法,面试中更容易将快速排序写出来。
再回到本题,本题是需要求出数组中第K大的元素,因此我们并不需要将整个数组都进行快速排序,我们只需要将第K大的元素找出来即可,我们与视频中保持一致,使用升序排列。因此我们在进行过一轮快速排序后,直接判断枢轴所在的下标为多少,如果枢轴所在的下标恰好为nums.size() - K,则枢轴对应的元素恰好为数组中第K大的元素,我们直接将其赋值给result即可。若枢轴对应的下标大于nums.size() - K,那我们只需要对枢轴左侧的区间进行排序,右侧不需要管。若枢轴对应的下标小于nums.size() - K,那我们只需要对枢轴右侧的区间进行排序,左侧不需要管。
下面简单描述一下单次快速排序的过程:

  1. 对于待排序区间,我们将快指针fast和慢指针slow同时指向区间的第一个元素,枢轴指向区间的最后一个元素。
  2. fast指向的元素大于等于枢轴元素时,则fast向右移动一位,slow保持不动;当fast指向的元素小于枢轴元素时,则先交换slowfast指向的元素,再同时将fastslow右移一位。
  3. fast到达枢轴指向的元素时,循环结束,此时还需要交换slow和枢轴指向的元素,此时,slow指向的元素为枢轴,slow左侧的元素都小于nums[slow],右侧的元素都大于等于nums[slow],此时一轮排序结束。
    下面是对应的代码,但是程序耗时太长了,这真的叫快速排序吗😂我怎么觉得是慢速排序呢
class Solution {
public:int result;int findKthLargest(vector<int>& nums, int k) {quicksort(nums, 0, nums.size() - 1, k);return result;}void quicksort(vector<int>& nums, int begin, int end, int k){int pivot = nums[end];  //总是选取区间的最后一个元素作为枢轴int slow = begin, fast = begin;  //初始化快慢指针while(fast < end){if(nums[fast] >= pivot)  //快指针元素大于等于枢轴则快指针右移fast++;else{swap(nums[slow], nums[fast]);slow++;fast++;}}swap(nums[slow], nums[end]);   //交换慢指针与枢轴所指的元素if(slow > nums.size() - k)  //需要向左查找quicksort(nums, begin, slow - 1, k);else if(slow < nums.size() - k)  //需要向右查找quicksort(nums, slow + 1, end, k);else{   //找到第k大的元素了result = nums[slow];return ;}}
};

http://www.xdnf.cn/news/13250.html

相关文章:

  • crackme008
  • 7zip超详细安装教程(含最新版本)压缩软件使用全解析
  • 【LangChain】1 模型,提示和输出解释器
  • STM32外部中断(寄存器和hal库实现)
  • 机房断电后 etcd 启动失败的排查与快速恢复实录
  • YOLOv11 | 注意力机制篇 | EMAttention与C2PSA机制的协同优化
  • 从0到1:HBase安装与操作指南
  • 3.vue3核心语法
  • 中马泰语言电商系统:打开东南亚电商市场的多语言钥匙
  • 【第二十三章 IAP】
  • Vim 替换命令完整学习笔记
  • 一次消谐器:高效抑制铁磁谐振
  • 对DOM操作 与 jQuery的简单理解(通俗
  • DeepSeek生成流程图
  • 6.10 Mysql 事务 锁 面试题
  • 【Dv3Admin】系统视图角色管理API文件解析
  • 2025蓝奏云软件库合集分享链接汇总:极刻云搜 - 一站式获取海量资源
  • Linux下V2Ray安装配置指南
  • axios访问后台时,返回404
  • chrome插件中如何使用midscene.js
  • Leetcode 3577. Count the Number of Computer Unlocking Permutations
  • LeetCode 240 搜索二维矩阵 II
  • MySQL中的隐式主键和隐藏列
  • Go 语言接口详解
  • 架空线路图像视频监测装置
  • SkyWalking 10.2.0 SWCK 配置过程
  • 『uniapp』url拦截屏蔽 避免webview中打开淘宝店铺自动跳转淘宝
  • 腾讯开源 AniPortrait:音频驱动的逼真肖像动画生成革命
  • 【Java】Arrays.sort:DualPivotQuicksort
  • Spring AI MCP