面试热题(数组中的第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;
    }
相关推荐
灰色小旋风几秒前
力扣K个一组翻转链表C++
c++·算法·leetcode
北冥有羽Victoria6 分钟前
TGC:深度时序图聚类的动态建模与时空平衡|ICLR 2024 深度解读
人工智能·python·算法·机器学习·支持向量机·聚类
manyikaimen6 分钟前
博派智能-运动控制技术-RTCP-五轴联动
c++·图像处理·qt·算法·计算机视觉·机器人·c#
Swift社区14 分钟前
LeetCode 401 二进制手表 - Swift 题解
算法·leetcode·swift
Darkwanderor15 分钟前
搜索优化——启发式搜索和A*算法
c++·算法·启发式搜索·a星搜索
Master_oid21 分钟前
机器学习37:K邻近算法(K Nearest Neighbor,KNN)
人工智能·算法·机器学习
承渊政道29 分钟前
【优选算法】(实战突破字符串:经典题型与解题模板)
c语言·数据结构·c++·笔记·学习·算法·容器
STLearner30 分钟前
WWW 2026 | 时间序列(Time Series)论文总结(预测,生成,插补,分类,异常检测等)
论文阅读·人工智能·深度学习·神经网络·算法·机器学习·数据挖掘
w61001046632 分钟前
图论总结-day66
数据结构·算法·深度优先·图论
姗姗的鱼尾喵33 分钟前
Java 并发编程高频面试题(含AQS/线程池/锁)
java·经验分享·面试