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];
    }
};
相关推荐
电子_咸鱼2 小时前
LeetCode-hot100——验证二叉搜索树
开发语言·数据结构·c++·算法·leetcode·深度优先
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 56: 全排列II、话号码的字母组合
数据结构·算法·leetcode·决策树·链表·职场和发展·深度优先
Imxyk2 小时前
Codeforces Round 1052 (Div. 2) C. Wrong Binary Searchong Binary Search
c语言·c++·算法
Yunfeng Peng2 小时前
1- 十大排序算法(选择排序、冒泡排序、插入排序)
java·算法·排序算法
多看书少吃饭2 小时前
前端实现抽烟识别:从算法到可视化
前端·算法
MMjeaty3 小时前
特殊矩阵的压缩存储
算法·矩阵
断剑zou天涯3 小时前
【算法笔记】二叉树递归解题套路及其应用
java·笔记·算法
微笑尅乐10 小时前
力扣350.两个数组的交集II
java·算法·leetcode·动态规划
元亓亓亓12 小时前
LeetCode热题100--994. 腐烂的橘子--中等
算法·leetcode·职场和发展