【Java语言】力扣系列----215. 数组中的第K个最大元素(优先队列)

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

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

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

具体代码实现如下:

import java.util.*;
class Solution {
    public int findKthLargest(int[] nums, int k) {
       // 利用优先队列的小顶堆,先给小顶堆中添加k个元素,然后进行判断,大于堆顶的元素进堆,小于堆顶的元素不要。
      //  或者先将元素全部加入小顶堆中,然后poll出 length - k个元素,剩下的堆顶元素就是所求的第k个最大的元素。
      // 或者先将k个元素加入到小顶堆中,然后再offer一个进来,再poll一个出去
      PriorityQueue<Integer> min = new PriorityQueue<>();// 声明创建小顶堆
      int l = nums.length;
      for(int i = 0; i < k; i++){
          min.offer(nums[i]);// 先往小顶堆中添加k个元素
      }
      for(int i = k; i < l; i++){
          min.add(nums[i]);// 往小顶堆中再添加一个元素,利用小顶堆自动排出最小元素放堆顶的性质
          min.poll();// 再将小顶堆的堆顶元素(堆中最小的元素)poll出,保证堆中只有k个元素。
      }
      return min.peek();
      
      
      
      /*
      PriorityQueue<Integer> min = new PriorityQueue<>();// 声明创建一个小顶堆
      for(int i = 0; i < nums.length; i++){
          min.offer(nums[i]);// 将数组元素加入到小顶堆中
      }   
      for(int i = 0; i < nums.length; i++){
          if(min.size() > k){
              min.poll();
          }
      }
      return min.peek();
      */


       
       /*暴力法:先对数组进行升序排列,然后返回第[length - k]个元素
        Arrays.sort(nums);
        int n = nums.length;
        return nums[n-k];
        */
    }
}

人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德

小白寄语:学如逆水行舟,不进则退。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值