兰州做网站哪个平台好,常山做网站,网站数据分析课程,编程培训机构需要什么资质题目链接
数组中的第K个最大元素
题目描述 注意点
需要找的是数组排序后的第 k 个最大的元素#xff0c;而不是第 k 个不同的元素
解答思路
本题可以使用快速排序、堆排序或优先队列解决#xff0c;快排可以比较快速找到某个元素在数组中排序后的位置#xff0c;所以找…题目链接
数组中的第K个最大元素
题目描述 注意点
需要找的是数组排序后的第 k 个最大的元素而不是第 k 个不同的元素
解答思路
本题可以使用快速排序、堆排序或优先队列解决快排可以比较快速找到某个元素在数组中排序后的位置所以找到第k个最大的元素也比较快堆排序可以删除k次堆顶元素获取到第k个最大的元素主要消耗的时间在于维护最大堆的过程上优先队列可以维护一个大小为k的队列需保证队列中的元素有序队顶元素是队列中最小的元素通过不断比较堆顶元素和数组元素如果大于则替换队顶元素遍历完整个数组后队顶元素就是第k个最大的元素
代码
class Solution {public int findKthLargest(int[] nums, int k) {// 优先队列根据元素值排序PriorityQueueInteger queue new PriorityQueue(k, Comparator.comparingInt(a - a));for (int i 0; i k; i) {queue.offer(nums[i]);}int res 0;for (int i k; i nums.length; i) {if (nums[i] queue.peek()) {queue.poll();queue.offer(nums[i]);}}return queue.peek();}
}关键点
学习优先队列学习堆排序