题目描述:
给定整数数组 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]; };