215. Kth Largest Element in an Array

本文介绍了一种利用优先队列高效查找未排序数组中第K大元素的方法。通过实例演示了如何维护一个固定长度的优先队列来逐步筛选出目标元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

Note: 

You may assume k is always valid, 1 ? k ? array's length.


題意:

給定一個數組,輸出第k大的元素

題解(優先隊列):

利用PriorityQueue(優先隊列)來實現在數組中找到第k大的元素
優先隊列的解釋:

在優先隊列這種數據結構中,每一個元素都會被賦予一個優先級,通常是由小到大(依照元素內容排序)。當訪元素時,具有最高優先級的元素將會最先删除。優先隊列具有最高級別(最大元素)先出 (first in, largest out)的行為特徵。

下面就是本代碼運行的過程:
    Ex: 8 5 6 7 2 3 4, k = 4
    2 3 4 5 6 7 8
    1.queue 8
    2.queue 6 8
    3.queue 5 6 8
    4.queue 5 6 7 8 
    5.queue 4 5 6 7 排出 8(維護一個長度固定為4的數組])
    6.queue 2 4 5 6 排出 7
    7.queue 2 3 4 5 排出 6
    而到最終一步,最後一個元素為5,則答案為5

package LeetCode.Medium;

import java.util.PriorityQueue;
import java.util.Queue;

public class KthLargestElementInAnArray {
    /*
 本題是利用PriorityQueue(優先隊列)來實現在數組中找到第k大的元素
在優先隊列這種數據結構中,每一個元素都會被賦予一個優先級,通常是
由小到大(依照元素內容排序)。當訪元素時,具有最高優先級的元素將會
最先删除。優先隊列具有最高級別(最大元素)先出 
(first in, largest out)的行為特徵。
   
    下面就是本代碼運行的過程:
    Ex: 8 5 6 7 2 3 4, k = 4
    2 3 4 5 6 7 8
    1.queue 8
    2.queue 6 8
    3.queue 5 6 8
    4.queue 5 6 7 8 
    5.queue 4 5 6 7 排出 8(維護一個長度固定為4的數組])
    6.queue 2 4 5 6 排出 7
    7.queue 2 3 4 5 排出 6
    而到最終一步,最後一個元素為5,則答案為5
    */
    public int findKthLargest(int[] nums, int k) {
        Queue<Integer> pQueue = new PriorityQueue<Integer>();
        for(int i = 0; i < nums.length; i ++) {
            pQueue.add(nums[i]);
            if(pQueue.size() > k)
                pQueue.poll();
        }
        
        return pQueue.poll();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值