题目描述:

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

解析:

小顶堆
1.新建一个存放k个元素的小顶堆,遍历数组,将数组中的元素加入堆中,然后保持堆的大小为k
2.当堆已经满了之后,数组中的元素再依次与堆顶元素比较
如果当前元素比堆顶元素小,则继续遍历数组
如果当前元素比堆顶元素大,则堆顶元素出堆,该元素入堆
3.当遍历完所有元素后,堆中存放的便是数组中最大的k个数,堆顶便是第k大的数

Java(小顶堆):

public int findKthLargest(int[] nums, int k) {
        Queue<Integer> heap = new PriorityQueue<>();
        for(int num : nums) {
            if(heap.size() < k) {
                heap.add(num);
            } else if(heap.peek() < num) {
                heap.remove();
                heap.add(num);
            }
        }
        return heap.peek();
    }

JavaScript(冒泡排序):

var findKthLargest = function(nums, k) {
    for(let i = 0; i < k; i++) {
        for(let j = 1; j < nums.length - i; j++) {
            if(nums[j] < nums[j-1]) {
                let temp = nums[j];
                nums[j] = nums[j-1];
                nums[j-1] = temp;
            }
        }
    }
    return nums[nums.length - k];
};