首页 > 其他 > 详细

【leetcode】215. Kth Largest Element in an Array

时间:2018-01-31 19:42:31      阅读:188      评论:0      收藏:0      [点我收藏+]

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.

题解1:玩赖的写法,直接调用java中的sort函数,之后选取倒数第k个元素,即为所有。

public int findKthLargest(int[] nums, int k) {
        Arrays.sort(nums);
        int len = nums.length;
        return nums[len - k];
    }

题解2:使用优先队列来实现一个小根堆。堆未满时,直接插入nums[i];堆满了,执行poll(),先删除队列中的一个元素,在插入新元素。

      在java中,常见的队列操作以及它们的区别如下所示:

插入 offer 向队列插入元素,在一个满的队列中加入一个新项会返回false。
add 向队列插入元素,在一个满的队列中加入一个新项会抛出异常。
删除 poll 从队列中删除第一个元素,在队列为空时返回null。
remove 从队列中删除第一个元素,在队列为空时会抛出异常。
查看队头元素 peek 在队列的头部查询元素,在队列为空时返回null。
element 在队列的头部查询元素。在队列为空时会抛出异常。
public int findKthLargest2(int[] nums, int k) {
         PriorityQueue<Integer> minHeap = new PriorityQueue<>(nums.length,(w1, w2)->w1.compareTo(w2));
        for(int j=0;j<nums.length;j++){
            minHeap.add(nums[j]);
            if(minHeap.size()>k){
                minHeap.poll();
            }
        }
        return minHeap.peek();
    }

完整代码如下:

package medium;

import java.util.Arrays;
import java.util.PriorityQueue;

public class L215KthLargestElementinanArray {

    public int findKthLargest(int[] nums, int k) {
        Arrays.sort(nums);
        int len = nums.length;
        return nums[len - k];
    }

    public int findKthLargest2(int[] nums, int k) {
        PriorityQueue<Integer> minHeap = new PriorityQueue<>(nums.length, (w1, w2) -> w1.compareTo(w2));
        for (int j = 0; j < nums.length; j++) {
            minHeap.add(nums[j]);
            if (minHeap.size() > k) {
                minHeap.poll();
            }
        }
        return minHeap.peek();
    }

    public static void main(String[] args) {
        L215KthLargestElementinanArray l215 = new L215KthLargestElementinanArray();
        int[] nums = { 2, 1, 3, 4, 5 };
        int k = 1;
        int number = l215.findKthLargest(nums, k);
        System.out.println(number);
        System.out.println("!!!!!!!!!!!!");
        int num2 = l215.findKthLargest2(nums, k);
        System.out.println(num2);
    }
}

 

【leetcode】215. Kth Largest Element in an Array

原文:https://www.cnblogs.com/yumiaomiao/p/8393751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!