力扣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();
    }
}
posted @ 2025-08-29 21:16  柳成荫y  阅读(12)  评论(0)    收藏  举报