力扣215.数组中的第k大的元素 | 堆 |
暴力解法:
先排序,然后找n-k下标的值。
解析:
排序算法(如快速排序、归并排序或堆排序)的平均时间复杂度通常为 O(n·log n)。这意味着随着数组规模 n 增大,排序所需的时间以 n·log n 的速度增长。空间换时间,使用 堆 存入的数据有序,大根堆和小根堆。
优化解法:
如果是大根堆,堆的大小为n,每次插入或弹出操作的时间复杂度为 O(log n)(因为堆的高度为 log n),创建堆的时间为
O( n ),弹出k次所需时间为O( k log n), 总的时间复杂度 O ( n + k log n)。
如果是小根堆,堆的大小最多为 k,每次插入或弹出操作的时间复杂度为 O(log k)(因为堆的高度为 log k),我们需要遍历 n 个元素,对于每个元素,最坏情况下可能执行一次堆操作,所以总操作次数为 n 次堆操作,因此总时间复杂度为 O(n log k)。
题解代码
点击查看代码
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> min_Heap = new PriorityQueue<>();
for(int num : nums){
if(min_Heap.size() < k){
min_Heap.offer(num);
}
else if(num > min_Heap.peek()){
min_Heap.poll();
min_Heap.offer(num);
}
}
return min_Heap.peek();
}
}
浙公网安备 33010602011771号