Leetcodehot100-215. 数组中的第K个最大元素

复制代码
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
       // 1. 把所有元素放入最大堆
priority_queue<int> pq;  // 最大堆,堆顶是最大值
for(int i=0; i<nums.size(); ++i) {
    pq.push(nums[i]);
}

// 2. 弹出前 k-1 个最大值
for(int i=k-1; i>0; i--) {
    pq.pop();  // 弹出最大值、第二大值...
}

// 3. 堆顶就是第 k 大的值
return pq.top();
    }
};

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        // 最小堆,只维护 k 个最大的元素
        priority_queue<int, vector<int>, greater<int>> pq;
        
        for(int num : nums) {
            pq.push(num);
            if(pq.size() > k) {
                pq.pop();  // 弹出最小的,保持堆大小为 k
            }
        }
        
        return pq.top();  // 堆顶是第 k 大的
    }
};

class Solution {
public:
    int quickselect(vector<int>& nums, int left,int right,int k){
        if(left==right){
            return nums[k];
        }
        int i=left-1,j=right+1;
        int tmp=nums[left];
        while(i<j){
            do i++; while (nums[i] < partition);  // 找到左边第一个 >= tmp 的元素
            do j--; while (nums[j] > partition);  // 找到右边第一个 <= tmp 的元素
            if(i<j) swap(nums[i],nums[j]);
        }
        if(k<=j) return quickselect(nums,left,j,k);
        else return quickselect(nums,j+1,right,k);
    }
    int findKthLargest(vector<int>& nums, int k) {
        int sz=nums.size();
        return quickselect(nums,0,sz-1,sz-k);
    }
};
  1. 选择枢轴(tmp) :通常选择左端元素 nums[l]

  2. 分区:重排数组,使得:

    • 左边部分([l..j])的所有元素 <= 枢轴

    • 右边部分([j+1..r])的所有元素 >= 枢轴

    • 注意:枢轴不一定在正中间,且 j 是分界点

  3. 判断并递归

    • 如果目标索引 k <= j,说明第 k 小的元素在左半部分 → 递归左半

    • 否则在右半部分 → 递归右半

  4. 终止条件

    • l == r 时,区间只有一个元素,nums[k] 就是答案
相关推荐
吃好睡好便好1 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅2 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue4 小时前
三角形数
笔记·算法·数论·组合数学
Mr. zhihao5 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路5 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星5 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑5 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光6 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩6 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494736 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表