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

news2024/12/23 9:23:49

解题步骤:

参考代码:

class Solution {
public:
    int QuickSelectSort(vector<int>& nums,int begin,int end,int k)
    {
        //随机选key
        int key=nums[begin+rand()%(end-begin+1)];
        //left在左端点前一个位置
        int left=begin-1;
        //right在右端点后一个位置
        int right=end+1;
        //cur从begin开始遍历
        int cur=begin;

        //当cur和right相遇就结束循环,因为[right,end]区间内的值是
        //比key大的,cur与right相遇就说明整个数组已经全部遍历过了
        while(cur<right)
        {
            //比key小就交换到左边,记得是先++left,再交换
            if(nums[cur]<key)
            {
                swap(nums[++left],nums[cur++]);
            }
            //比key大就交换到右边,记得是先--right,再交换
            else if(nums[cur]>key)
            {
                swap(nums[--right],nums[cur]);
            }
            //==key就跳过
            else
            {
                cur++;
            }
        }

        //a,b,c参考图片含义
        int a=left-begin+1;
        int b=(right-1)-(left+1)+1;
        int c=end-right+1;
        //参考图片判断规则
        if(c>=k)
        {
            return QuickSelectSort(nums,right,end,k);
        }
        else if(b+c>=k)
        {
            return nums[left+1];
        }
        else
        {
            return QuickSelectSort(nums,begin,left,k-b-c);
        }
    }

    int findKthLargest(vector<int>& nums, int k) {
        srand((unsigned int)time(nullptr));
        return QuickSelectSort(nums,0,nums.size()-1,k);
    }
};

以上就是这道topk问题基本上算是最优的算法了,时间复杂度无限逼近与O(N)的,这个快速选择算法是一个效率非常牛的算法哦!你学会了吗?如果你感觉到有所帮助,那么点点小心心,点点关注呗,后期还会持续更新力扣的经典题目哦,我们下期见!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LDA算法并提取这份数据集中各个文档的主题

任务描述&#xff1a;现有一份“网易新闻语料”数据集&#xff0c;请尝试用Python或Java实现LDA算法并提取这份数据集中各个文档的主题&#xff0c;并显示出来&#xff08;可参考下图的输出结果&#xff0c;可网上拷贝代码&#xff0c;但需对算法以及代码有一定的基本了解&…

《从零开始的Java世界》01基本程序设计

《从零开始的Java世界》系列主要讲解Javase部分&#xff0c;从最简单的程序设计到面向对象编程&#xff0c;再到异常处理、常用API的使用&#xff0c;最后到注解、反射&#xff0c;涵盖Java基础所需的所有知识点。学习者应该从学会如何使用&#xff0c;到知道其实现原理全方位式…

Python 逢七拍手小游戏1.0

"""逢七拍手游戏介绍&#xff1a;逢七拍手游戏的规则是&#xff1a;从1开始顺序数数&#xff0c;数到有7&#xff0c;或者是7的倍数时&#xff0c;就拍一手。例如&#xff1a;7、14、17......70......知识点&#xff1a;1、循环语句for2、嵌套条件语句if/elif/e…

【前段基础入门之】=>HTML结构进阶【列表;表格;表单】

前言 在上一章节中&#xff0c;我们学习了讲述了 html 中的一些常用排版标签&#xff0c;以及一些文本标签和超链接等相关知识。本章节将重点给大家带来 HTML 中【列表&#xff0c;表格&#xff0c;表单】的使用讲解。 目录 列表有序列表无序列表自定义列表 表格表格的基本结构…

在项目中使用Service Worker 与 PWA

小册 这是我整理的学习资料&#xff0c;非常系统和完善&#xff0c;欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记&#x1f4d2; 引言 最近next项目有使用pwa技术&#xff0c;使用起来也不复杂&#xff0c;目前浏览器的兼容…

【hadoop3.x】一 搭建集群调优

一、基础环境安装 https://blog.csdn.net/fen_dou_shao_nian/article/details/120945221 二、hadoop运行环境搭建 2.1 模板虚拟机环境准备 0&#xff09;安装模板虚拟机&#xff0c;IP 地址 192.168.10.100、主机名称 hadoop100、内存 4G、硬盘 50G 1&#xff09;hadoop100…

MongoDB基础详解

一、MongoDB概述 MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统&#xff0c;由 C 编写的。MongoDB 提供了 面向文档 的存储方式&#xff0c;操作起来比较简单和容易&#xff0c;支持“无模式”的数据建模&#xff0c;可以存储比较复杂的数据类型&#xff0c;是一…

MySQL的general日志

起因是一个客户的MySQL数据的data目录下会生成一个 名为ubuntu.log的日志且文件占用空间极大&#xff0c;平均每2周500G&#xff0c;所以才产生了处理该问题的想法。后来查询了相关资料其实就是一般日志开启了&#xff0c;但是又未指定其路径及名称所以就会一头雾水。 MySQL的g…

关于华为笔记本谷歌浏览器(chrome)默认启动页为360搜索的解决方法

一、简介 好久没打开谷歌浏览器&#xff0c;近期发现谷歌浏览器的启动是360搜素&#xff0c;现象比较常见&#xff0c;一开始以为是被各种病毒或插件拦截&#xff0c;经过很多尝试方法&#xff1a; 修改浏览器启动页设置【无效】修改快捷方式的“目标位置”属性【无效】修改&…

MySQL:码包安装mysql(5.6.51)

我们去下载mysql源码安装包和cmake包 安装mysql的时候需要使用到cmake&#xff0c;其次我们还要使用yum安装一些环境 yum -y install ncurses-devel gcc-c gcc openssl* perl* 下载mysql源码包 http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.51.tar.gzhttp://mirrors.s…

WebRTC之丢包重传协议

丢包处理可以使用FEC前向纠错、NACK丢包重传。上一篇文章咱们介绍过前向纠错&#xff0c;现在来探讨丢包重传。首先是接收端发送基于RTCP反馈的请求&#xff0c;发送端收到请求后重传指定packet包。 1、重传包格式 重传包的格式由RTP头、OSN、原始payload数据组成。OSN表示原…

Prometheus+Grafana实现监控报警

文章目录 一、PrometheusGrafana实现监控报警1.1 各项服务端口1.2 说明 二、部署2.1 展示 一、PrometheusGrafana实现监控报警 Prerequired K8s集群 1.1 各项服务端口 Service版本DescriptionPortNode-exporter1.6.1采集机器的各项监控指标9100Pushgatewayv1.6.2可手动push…

goadmin 学习笔记

1.安装命令行 Following three steps to run it. Note: now you can quickly start by doing like this. $ go install github.com/GoAdminGroup/admlatest $ mkdir new_project && cd new_project $ adm init Or (use adm whose version higher or equal than v1.…

给yarn/npm包管理设置代理加速nodejs依赖下载的方法

由于墙内网络干扰屏蔽国外网络的原因&#xff0c;在国内下载nodejs依赖是非常缓慢的。 所以为了解决这个问题&#xff0c;必须设置代理&#xff0c;具体方法如下&#xff1a; NPM设置代理&#xff1a; npm config set proxy<http_proxy> NPM删除代理&#xff1a; npm c…

Zookeeper-集群介绍与核心理论

Zookeeper集群 4.Zookeeper集群4.1) 介绍4.2) 核心理论 4.Zookeeper集群 4.1) 介绍 Leader选举&#xff1a; Serverid&#xff1a;服务器ID。比如有三台服务器&#xff0c;编号分别是1,2,3。编号越大在选择算法中的权重越大。Zxid&#xff1a;数据ID。服务器中存放的最大数据…

【力扣每日一题】2023.9.24 LRU缓存

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这又是一道程序设计类的题目&#xff0c;要我们实现LRU缓存的get和put操作。 简单说一下LRU缓存是什么&#xff0c;在我看来就是实用主义…

2023年kali linux安装中文输入法

apt-get install fcitx 安装输入法框架 apt-get install fcitx-googlepinyin 安装谷歌输入法 reboot &#xff0c;重启系统重启之后右上有个小键盘点击里面的配置 添加google输入法 把Google pinyin上移置顶 验证输入法【CtrlSpace 切换输入法】

vue3 - Element Plus暗黑模式适配、切换及自定义颜色

GitHub Demo 地址 在线预览 Element Plus 2.2.0 版本开始支持暗黑模式&#xff0c;启用方式参考 Element Plus 官方文档 - 暗黑模式 demo通过Element Plus和VueUse 的 useDark 方法实现具有自动数据持久性的响应式暗黑模式。 安装 npm install element-plus --save npm in…

【owt】vs2022 + v141 : 查看WINDOWSSDKDIR

confmfc改为vs2022 + v141 构建 去掉这几个boost库,一样可以链接ok libboost_system-vc141-mt-sgd-x32-1_67.lib libboost_date_time-vc141-mt-sgd-x32-1_67.lib libboost_random-vc141-mt-sgd-x32-1_67.libSDK不在2022或者2017 里面? WINDOWSSDKDIR 在哪里? ##

设计模式之观察者(发布订阅)模式

观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己 class Program{static void Main(string[] args){ConcreteSubject concreteSu…