LeetCode:74.数组中的第K个最大元素

目录

1.数组中的第K个最大元素


1.数组中的第K个最大元素

这道题通过堆排序解决,我们建立一个最大堆,将堆顶的K - 1个元素删除,留下的就是第K大的

cpp 复制代码
class Solution {
public:
    void maxHeap(vector<int>& nums, int parent, int heapsize)
    {
        int left = parent * 2 + 1, right = parent * 2 + 2;
        int maxsum = parent;
        if(left < heapsize && nums[left] > nums[maxsum]) maxsum = left;
        if(right < heapsize && nums[right] > nums[maxsum]) maxsum = right;
        if(maxsum != parent)
        {
            swap(nums[maxsum], nums[parent]);
            maxHeap(nums, maxsum, heapsize);
        }
    }
    
    void buildMaxHeap(vector<int>& nums, int heapsize)
    {
        for(int i = heapsize; i >= 0; i--)
            maxHeap(nums, i, heapsize);
    }

    int findKthLargest(vector<int>& nums, int k) 
    {
        int heapsize = nums.size();
        buildMaxHeap(nums, heapsize);
        for(int i = nums.size() - 1; i >= nums.size() - k + 1; i--)
        {
            swap(nums[0], nums[i]);
            --heapsize;
            maxHeap(nums, 0, heapsize);
        }
        return nums[0];
    }
};
相关推荐
Dlrb12111 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
Tisfy1 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy1 小时前
【算法四十七】152. 乘积最大子数组
算法
淘矿人2 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
Cosolar2 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
落羽的落羽4 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
萑澈5 小时前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl
Godspeed Zhao5 小时前
从零开始学AI16——SVM
算法·机器学习·支持向量机
江屿风5 小时前
C++OJ题经验总结(竞赛)1
开发语言·c++·笔记·算法