当前位置: 首页 > article >正文

Leetcode215. 数组中的第K个最大元素(HOT100)

链接

第一次:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        sort(nums.begin(),nums.end());
        int n = nums.size();
        return nums[n-k];
    }
};

这显然不能出现在面试中,因为面试官考察的不是这个。

正确的代码:

class Solution{
    public:
        int quick_sort(vector<int>& nums,int l,int r,int k){
            if(l==r)return nums[k];//会保证第k小的数一直在递归的区间中,那么当区间里只有一个数的时候,就一定是要找的数了。
            int x = nums[l],i = l-1,j = r+1;
            while(i<j){
                do i++;while(nums[i]>x);
                do j--;while(nums[j]<x);
                if(i<j)swap(nums[i],nums[j]);
            }
            if(k<=j)return quick_sort(nums,l,j,k);
            else return quick_sort(nums,j+1,r,k);
        }
        int findKthLargest(vector<int>& nums,int k){
            return quick_sort(nums,0,nums.size()-1,k-1);//第k大,比如第1大,其实是降序排序后,索引为0的元素,第2大,就是索引为1的元素。
            //此题如果改为,找出第k小的元素,那么只需将do while(翻转这里的符号即可);
        }
};

使用的是快速选择算法,本质还是快排。 

快速选择算法具体而言:

1.先找个目标值也就是题目中的x,将数组分到两边,此时x左边都<=x,右边>=x
2.查看k是否<=左边个数,如果小于说明在左侧内,左侧递归排序即可找到K。反之在右边
3.最终无限夹击找到K


http://www.kler.cn/a/402621.html

相关文章:

  • A045-基于spring boot的个人博客系统的设计与实现
  • 【计算机网络】多路转接之poll
  • 【时时三省】NIT计算机考试基础知识
  • 文件的处理(c语言)
  • 如何利用 Puppeteer 的 Evaluate 函数操作网页数据
  • 量子卷积神经网络
  • 「二」体验HarmonyOS端云一体化开发模板——创建端云一体化工程
  • 微服务电商平台课程-番外篇二:工作场景中git常用命令
  • RAG VS Fine-Tuning模型微调详解
  • mysql-备份(二)
  • React Native 全栈开发实战班 - 项目最佳实践之模块化开发
  • Linux 学习笔记(十九)—— 进程间通信
  • 基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)
  • 天津渤海职业技术学院“讯方技术HarmonyOS人才训练营”圆满开展
  • docker使用学习一
  • Harbor2.11.1生成自签证和配置HTTPS访问
  • Flutter将应用打包发布到App Store
  • 使用国产仿真平台SmartEDA,进行Arduino仿真设计之简易红绿灯设计(二)
  • Spring 框架中哪些接口可以创建对象
  • 【Redis 探秘】Redis 性能优化技巧
  • 在Linux下配置gitee与Github的远程仓库
  • 实战OpenCV之人脸识别
  • Spring6 MyBatis
  • 高防IP如何构建安全高效的数字政务新生态
  • Python3 Flask 应用中使用阿里短信发送
  • 3. SQL优化