Leetcode面试经典150题-215.数组中的第k个最大元素

 解法都在代码里,不懂就留言或者私信

class Solution {
    /**这个题没看出来考啥?考堆吗?那你要熟悉堆的特性和常用的操作 */
    public int findKthLargest(int[] nums, int k) {
        /**如果数组只有一个数而k又大于等于1小于等于数组长度,那就只能返回第一个了*/
        if(nums.length == 1) {
            return nums[0];
        }
        /**堆默认是小顶堆(顶上最小,也称为大根堆)*/
        PriorityQueue<Integer> heap = new PriorityQueue<>();
        /**遍历原始入堆 */
        for(int num : nums) {
            /**如果堆的大小小于k,直接入堆 */
            if(heap.size() < k) {
                heap.offer(num);
                /**如果堆的大小已经等于k了(堆满了),如果当前元素比堆顶(堆中最小的)大则把堆顶弹出,自己入堆
                否则这个数直接淘汰 */
            } else if(num >= heap.peek()){
                heap.poll();
                heap.offer(num);
            }
            /**else就不写了,啥也不做*/
        }
        /**堆里面的k个数就是最大的k个数,而顶上是它们里最小的,也就是第k大的数 */
        return heap.peek();
    }
}

效果一般吧,Leetcode推荐快排和堆排序,本题是堆排序

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值