【力扣二刷思路】DAY3

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

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

思路

  1. findKthLargest 函数:公共接口函数,接收一个整数数组 nums 和一个整数 k 作为参数,返回第 k 大的元素。在该函数中,直接调用了私有成员函数 qucikSelect,并将结果返回。

  2. qucikSelect 函数:递归接收一个整数数组 nums 和一个整数 k 作为参数,返回数组中第 k 大的元素。该函数的实现采用了快速选择算法的思想。

    • 在每次调用中,随机选择数组中的一个元素 p 作为 pivot(中轴)。
    • 然后将数组 nums 中小于、等于和大于 pivot 的元素分别放入三个数组 small、equal 和 big 中。
    • 如果 k 小于等于 big 的大小,则在 big 数组中继续递归查找第 k 大的元素。
    • 如果 k 大于 big 的大小但小于等于 nums 减去 small 的大小,说明第 k 大的元素位于 equal 中,直接返回 pivot。
    • 如果 k 大于 nums 减去 small 的大小,则在 small 数组中继续递归查找第 k 减去 small 大小的元素。
  3. 递归结束条件:递归结束条件是当数组大小等于 1 时,直接返回数组中唯一的元素。

  4. 时间复杂度:平均时间复杂度为 O(n),最坏情况下为 O(n^2),其中 n 为数组的大小。这是因为快速选择算法的平均情况下每次能够将搜索范围缩小为原来的一半,但最坏情况下可能需要遍历整个数组。

  5. 空间复杂度:除了递归调用栈外,额外使用了三个辅助数组,因此空间复杂度为 O(n)。

题解

class Solution {
public:// 主函数,找出无序数组中第 k 大的元素int findKthLargest(vector<int>& nums, int k) {// 调用快速选择算法并返回结果return quickSelect(nums, k);}private:// 快速选择算法int quickSelect(vector<int>& nums, int k) {// 随机选择一个元素作为 pivot(中轴)int pivot = nums[rand() % nums.size()];// 定义三个辅助数组,分别存放小于、等于和大于 pivot 的元素vector<int> smaller, equal, bigger;// 遍历数组,将元素根据大小放入不同的辅助数组中for (int num : nums) {if (num < pivot)smaller.push_back(num);else if (num == pivot)equal.push_back(num);elsebigger.push_back(num);}// 如果 k 小于等于大于 pivot 的元素数量,则在 bigger 数组中继续查找第 k 大的元素if (k <= bigger.size())return quickSelect(bigger, k);// 如果 k 大于 bigger 的大小但小于等于 nums 减去 smaller 的大小,则返回 pivotif (k <= bigger.size() + equal.size())return pivot;// 否则,在 smaller 数组中继续查找第 k - (bigger.size() + equal.size()) 大的元素return quickSelect(smaller, k - bigger.size() - equal.size());}
};

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

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

相关文章

Windows系统安装GeoServe结合内网穿透实现公网访问本地位置信息服务

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

ai写作一键生成,分享6种好用的写作软件,一定要看

在写文章时&#xff0c;我们常常会遇到灵感丧失、词句不顺的情况&#xff0c;为了解决这一问题&#xff0c;小编为大家推荐几款实用的AI写作软件&#xff0c;一同来探索一下吧&#xff01; 一、爱制作AI 爱制作AI是一款专注于写作的软件&#xff0c;强大的智能数据库让它备受…

Docker进阶:离线安装docker社区版(docker-18.06.3-ce)

Docker进阶&#xff1a;离线安装docker社区版&#xff08;docker-18.06.3-ce&#xff09; 1、准备离线安装所需的文件2、传输文件至目标Linux系统3、卸载旧版Docker4、离线安装Docker1、解压上传的Docker安装包2、拷贝文件到/usr/bin目录3、将 Docker 注册为系统服务4、重新加载…

力扣203. 移除链表元素

写法1、头节点 和 后面的节点 删除规则不一致 class Solution {public ListNode removeElements(ListNode head, int val) {//如果不建虚拟头节点&#xff0c;那删头节点和删后面的节点&#xff0c;逻辑是不一样的//头节点可能连续多个命中val,所以有while&#xff0c;不是ifwh…

VMware错误解决

1、错误&#xff1a;operating system not found: 编辑虚拟机 &#xff1a;找到CD/DVD并点击 --- 映像文件 2、VMware:no boot filename received 解决方法&#xff1a;重新换个镜像&#xff0c;网上各种网站的镜像大多都是有问题&#xff0c;最推荐的网站还是 MSDN, 我告…

大型政企智能化升级,有了“验方”

随着两会落下帷幕&#xff0c;“人工智能”正式上升为国家战略&#xff0c;智能化建设的浪潮席卷而来。在这场转型升级的浪潮中&#xff0c;大型政企扮演着举足轻重的角色。它们不仅是智能化升级的重要力量&#xff0c;更是引领行业变革、推动社会进步的关键因素。 在智能化升…

2684. 矩阵中移动的最大次数

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid &#xff0c;矩阵由若干 正 整数组成。 …

this指向是在那个全局变量?

在浏览器环境中&#xff0c;如果没有特殊处理&#xff0c;全局对象是 window 对象。因此&#xff0c;在浏览器环境中&#xff0c;this 的指向在全局作用域中将是 window 对象。在 Node.js 环境中&#xff0c;全局对象是 global 对象。 举例来说&#xff0c;在浏览器环境下&…

月度工作计划

以下是一份可能的月度工作计划&#xff0c;包含了您提供的关键词&#xff1a; 第一周&#xff1a;需求分析和项目规划 需求分析 确定爬虫的目标网站和所需数据。分析所需解析的民航相关知识网站的内容结构。 项目规划 制定项目时间表和里程碑。分配资源和任务。 第二周&…

How to upgrade NBU cluster from 10.0.0.1 to 10.2.0.1

1. Environment Statement OS: SuSE 12 SP4 InfoScale: 7.4.2 NBU: 10.0.0.1 2. Download EEB patch and utf8 tools 2.1 Donwload utf8 check tools from Veritas. utf8 character check before NBU upgrade, upgrade will be failed if “NBDB” is using utf8 characte…

C# EPPlus导出dataset----Excel3样式

目录 一、单元格计算 二、隐藏操作 三、全局样式 四、指定范围样式

Python实战:Flask轻量级web框架入门

Flask是一个轻量级的Web框架&#xff0c;它是由Armin Ronacher开发的&#xff0c;使用Python语言编写。Flask易于上手&#xff0c;具有高度的可扩展性&#xff0c;非常适合快速开发Web应用程序。 一.Flask简介 Flask是一个基于Werkzeug WSGI工具箱和Jinja2模板引擎的Web框架。…

thinkphp 微信商户转账到微信小程序用户零钱(v3密钥版)

这几天做项目有一个需求,小程序用户提交记录后,商家后台审核通过自动转账到用户的微信零钱中. 今天分享下如何实现自动打款, 一种是用v2密钥的接口:企业付款到零钱 一种是用v3密钥的接口:微信商户转账到零钱(听说是v2接口的微信商户容易被限制,后来就改成v3了) php后端代码 v3…

Linux中判断某个Docker容器服务的内存是否超过临界值,比如到达10G,则在凌晨4点执行定时任务执行重新构建命令

监测NAME是blade-jiangxinzhougarden的服务&#xff0c;如果内存&#xff08;MEM USAGE&#xff09;超过10G则在凌晨4点执行重新构建命令 1.编写脚本文件restart_jxz.sh #!/bin/bash# 设置要监控的容器名称或服务名称(替换成你的服务名) SERVICE_NAME"blade-jiangxinzhou…

正信晟锦:老板拖工资怎么说比较合适

在职场中&#xff0c;老板拖欠工资是一个敏感而棘手的问题。面对这一情况&#xff0c;员工应保持冷静与专业&#xff0c;采取合适的方式表达自己的合理关切&#xff0c;并寻求问题的解决。 私下与老板进行沟通。选择一个适当的时机&#xff0c;以尊重和理解的态度开场&#xff…

Leetcode 3084. Count Substrings Starting and Ending with Given Character

Leetcode 3084. Count Substrings Starting and Ending with Given Character 1. 解题思路2. 代码实现 题目链接&#xff1a;3084. Count Substrings Starting and Ending with Given Character 1. 解题思路 这一题其实挺简单的&#xff0c;只要看一下目标的character在stri…

数据库系统概论 第五版(王珊) 数据库课程实验

数据库系统概论 第五版(王珊) 数据库课程实验 定义基本表 8个基本表建表sql如下&#xff1a; CREATE TABLE Region(/*地区表*/regionkey INTEGER PRIMARY KEY ,name CHAR(25),COMMENT VARCHAR(152) );CREATE TABLE Nation (/*国家表*/nationkey integer PRIMARY KEY ,name c…

每日一题——LeetCode1694.重新格式化电话号码

方法一 模拟&#xff1a; 首先去除number里面的破折号和空格&#xff0c;取出纯数字组成的字符串str。 对于str每三个数分成一组&#xff0c;加一个破折号&#xff0c;当str的长度小于等于4时再分情况讨论&#xff0c;如果等于4就分为22形式&#xff0c;如果小于4&#xff0c…

Springboot 整合Mybatis 实现增删改查(二)

续上篇&#xff1a;Springboot整合Mybatis的详细案例图解分析-CSDN博客 mapper层&#xff08;StudentMapper&#xff09; //通过id查询student方法Student searchStudentById(int id);//通过id删除student方法int deleteStudentById(int id);//通过id增加student方法int inser…

基于springboot+vue的乡政府管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…