面试热题(数组中的第K个最大元素)

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

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

复制代码
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

提到数组中最大元素,我们往往想到就是先给数组进行排序,然后取最大值,现在我们按照这个思路写一写代码

  • 首先判断入参是否合法
java 复制代码
f (nums == null || nums.length == 0) {
            return 0;
        }
  • 然后对数组进行排序
java 复制代码
Arrays.sort(nums);//默认排序方法时双基准快排,效率较高
  • 因为我们取的是第k个最大的元素

因为数组的长度是6,而k是2,我们所需要求的值的索引刚好是4,所以我们可以得出我们所需要推出的值是nums.length-k(在做题的过程中,如果需要确定关系式的这种情况,个人建议还是举出例子,然后亲自推导比较好一点)

java 复制代码
 return nums[nums.length  - k];

接下来,提到最大值,大家还能想到什么方法?是不是有种数据结构,特能自动的为我们进行数值的排序,不错,就是优先队列 ,我们可以先将数组中的元素都往优先队列中塞进去,然后poll k次就是我们所需要的值,我们直接上代码

java 复制代码
   public int findKthLargest(int[] nums, int k) {
       if(nums==null||nums.length==0){
           return 0;
       }
       //对比较器进行重写,从大到小,因为PriorityQueue的默认排序时升序排序
       PriorityQueue<Integer> queue=new PriorityQueue<>((a,b)->{
           return b -a;});
       for(int num:nums){
           queue.offer(num);
       }
       int res=0;
       while(k>0){
           res=queue.poll();
           k--;
       }
       return res;
    }
相关推荐
CoovallyAIHub8 分钟前
CVPR 2026 | MixerCSeg:仅2.05 GFLOPs刷新四大裂缝分割基准!解耦Mamba隐式注意力,CNN+Transformer+Mamba三
深度学习·算法·计算机视觉
boooooooom37 分钟前
别再用错 ref/reactive!90%程序员踩过的响应式坑,一文根治
javascript·vue.js·面试
CoovallyAIHub38 分钟前
YOLO26-Pose 深度解读:端到端架构重新设计,姿态估计凭什么跨代领先?
深度学习·算法·计算机视觉
张元清41 分钟前
Astro 6.0:被 Cloudflare 收购两个月后,这个"静态框架"要重新定义全栈了
前端·javascript·面试
青青家的小灰灰43 分钟前
深入理解 async/await:现代异步编程的终极解决方案
前端·javascript·面试
CoovallyAIHub1 小时前
化工厂气体泄漏怎么用AI检测?30张图3D重建气体泄漏场景——美国国家实验室NeRF新研究
深度学习·算法·计算机视觉
Baihai_IDP3 小时前
为什么 AI 巨头们放弃私有壁垒,争相拥抱 Agent Skills
人工智能·面试·llm
Moment3 小时前
Agent 开发本质上就是高级点的 CRUD
前端·后端·面试
颜酱13 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
哈里谢顿14 小时前
0305乒乓xx agent运维开发岗面试记录
面试