LeetCode刷题之HOT100之数组中的第K个最大元素

2024 6/29 今天天气很好啊,想爬山,奈何下午还有最后的一个汇报。做个题先

1、题目描述

在这里插入图片描述

2、算法分析

看到这个题我想到的就是:

  public int findKthLargest(int[] nums, int k) {Arrays.sort(nums);return nums[nums.length - k ];}

哈哈,我提交上去击败了67.49%,想点正规的算法。
这个是在考察排序的,下图为八大排序复杂度情况。
在这里插入图片描述
为了将复杂度控制在O(n)层级。what should i do?那就是在快排的基础上稍作改进:
这里是快排:

3、代码

public int quickSort(int[] nums, int left, int rigth, int k){if(left == rigth){return nums[k];}int base = nums[left];while(left < rigth){while(left < rigth && nums[rigth] > base){rigth--;}while(left < rigth && nums[left] < base){left++;}if(left < rigth){int temp = nums[left];nums[left] = nums[rigth];nums[rigth] = temp;}}if(k <= rigth){return quickSort(nums, left, rigth, k);}else{return quickSort(nums, left + 1, rigth, k);}}public int findKthLargest(int[] nums, int k) {int n = nums.length;return quickSort(nums, 0, n - 1, k);}

测试时间超出限制,所以需要改进一下:

public int quickSort(int[] nums, int left, int rigth, int k){// 当左边界等于右边界时,说明搜索区间只有一个元素,直接返回该元素if(left == rigth){return nums[k];}// 选择基准值(这里我们简单选择左边界的元素作为基准)int base = nums[left], i = left - 1, j = rigth + 1;while (i < j) {// 使用do-while循环进行快速选择的分区过程  // 将小于基准的元素放到左边,大于基准的元素放到右边// 从左向右扫描,找到第一个大于或等于基准的元素  do i++; while (nums[i] < base);// 从右向左扫描,找到第一个小于或等于基准的元素 do j--; while (nums[j] > base);// 如果i和j还未相遇,则交换它们if (i < j){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}// j 现在指向小于基准值的最后一个元素的右边一个位置  // 如果 k 的值小于或等于这个位置(即 k 指向的元素在基准值的左边或与其相等),  // 则第k大的元素在左半部分,递归搜索左半部分 if (k <= j) return quickSort(nums, left, j, k);// 否则,第k大的元素在右半部分,递归搜索右半部分  // 注意:k的值不需要改变,因为我们是基于当前搜索范围的索引来搜索的else return quickSort(nums, j + 1, rigth, k);}public int findKthLargest(int[] nums, int k) {int n = nums.length;return quickSort(nums, 0, n - 1, n - k );}

官方的题解真的规范性太差了,anyway,就到这儿吧

4、复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(logn),递归使用栈空间的空间代价的期望为 O(logn)。

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

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

相关文章

抖音矩阵云混剪系统源码 短视频矩阵营销系统V2(全开源版)

>>>系统简述&#xff1a; 抖音阵营销系统多平台多账号一站式管理&#xff0c;一键发布作品。智能标题&#xff0c;关键词优化&#xff0c;排名查询&#xff0c;混剪生成原创视频&#xff0c;账号分组&#xff0c;意向客户自动采集&#xff0c;智能回复&#xff0c;多…

模型预测控制:线性MPC

模型预测控制&#xff1a;线性MPC 模型预测控制&#xff08;Model Predictive Control, MPC&#xff09;是一种广泛应用于工业过程控制和自动驾驶等领域的先进控制技术。MPC通过在线解决优化问题来计算控制输入&#xff0c;从而实现系统的最优控制。本文将介绍线性MPC的系统模…

融资担保行业数字化转型探索与实践

融资担保行业数字化转型探索与实践 随着全球经济的快速发展和科技的不断进步&#xff0c;数字化转型已成为各行各业提升竞争力和实现可持续发展的必然选择。融资担保行业作为金融体系中的重要组成部分&#xff0c;也在积极探索和实践数字化转型&#xff0c;以更好地服务中小微企…

海外媒体发稿:2个必选媒体宣发套餐引爆影响力-华媒舍

本文旨在介绍2个必选媒体宣发套餐的特点及其如何引爆影响力。 在当今竞争激烈的媒体环境中&#xff0c;有效的宣传和推广策略对于企业和个人的成功至关重要。这就是为什么选择正确的宣发套餐成为了一个关键的决策。 2. 媒体宣发套餐概述 媒体宣发套餐是一种综合性的宣传方案&…

14 卡尔曼滤波及代码实现

文章目录 14 卡尔曼滤波及代码实现14.0 基本概念14.1 公式推导14.2 代码实现 14 卡尔曼滤波及代码实现 14.0 基本概念 卡尔曼滤波是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法。由于观测数据包括系统中的噪声和…

如何利用PHP实现爬虫监控

爬虫监控是一种用来跟踪目标网站内容变化的技术&#xff0c;通常用于网站内容更新或者数据采集。php作为一种优秀的开发语言&#xff0c;在实现爬虫监控方面也有着不俗的能力。本文将介绍如何利用php实现爬虫监控的常用方法。 设置爬取目标 在开始爬虫监控之前&#xff0c;需…

【Linux】服务器被work32病毒入侵CPU占用99%

文章目录 一、问题发现二、问题解决2.1 清楚病毒2.2 开启防火墙2.3 修改SSH端口2.4 仅使用凭据登录&#xff08;可选&#xff09; 一、问题发现 我的一台海外服务器&#xff0c;一直只运行一项服务&#xff08;你懂的&#xff09;&#xff0c;但是前不久我发现CPU占用99%。没在…

PTA:7-12 斐波那契数列

斐波那契数列 (FibonacciSequence)&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契 (LeonardoFibonacci) 以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;1,1,2,3,5,8,13,21,⋯ 在数学上&#xff0c;斐…

如何用Go语言,实现基于宏系统的解释器?

目录 一、Go语言介绍二、什么是宏系统三、什么是解释器四、如何用Go语言实现一个基于宏系统的解释器&#xff1f; 一、Go语言介绍 Go语言&#xff0c;又称为Golang&#xff0c;是一种由谷歌公司开发并开源的编程语言。Go语言的设计目标是提高程序员的生产力&#xff0c;同时具…

MFC扩展库BCGControlBar Pro v35.0新版亮点 - 工具栏、菜单全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了&#xff0c;这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

EXPLAIN--SQL执行计划各个参数含义

目录 一、简介 二、详细介绍 三、意义 一、简介 EXPLAIN是SQL语句中用于分析和显示执行计划的命令&#xff0c;主要用于帮助理解查询是如何被数据库优化器处理的。在不同的数据库系统中&#xff08;如MySQL、PostgreSQL、SQLite等&#xff09;&#xff0c;EXPLAIN的具体语法…

算法力扣刷题记录 二十三【151.翻转字符串里的单词】

前言 字符串篇&#xff0c;继续。 记录 二十三【151.翻转字符串里的单词】 – 一、题目阅读 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词…

【04】从0到1构建AI生成思维导图应用 -- 创建 AI 工作流

【04】从0到1构建AI生成思维导图应用 – 创建 AI 工作流 大家好&#xff01;最近自己做了一个完全免费的AI生成思维导图的网站&#xff0c;支持下载&#xff0c;编辑和对接微信公众号&#xff0c;可以在这里体验&#xff1a;https://lt2mind.zeabur.app/ 上一章&#xff1a;h…

监控Linux/Windows服务器CPU、内存使用率TOP5的服务进程

主题&#xff1a;监控Linux/Windows服务器CPU、内存使用率TOP5的服务进程 内容&#xff1a; 一、Windows系统监控CPU、内存使用率TOP5的进程 1、编写脚本monitor.ps1 # 获取CPU使用率前5的服务进程,无法直接获取使用率&#xff0c;该值为“进程已用于所有处理器的处理器时间…

go语言怎么向kafka推送消息?

在Go语言中&#xff0c;你可以使用confluent-kafka-go&#xff08;也称为librdkafka的Go客户端&#xff09;或segmentio/kafka-go等第三方库来与Apache Kafka交互&#xff0c;并向其推送&#xff08;或生产&#xff09;消息。以下是使用confluent-kafka-go库向Kafka推送消息的简…

centos7安装mysql8-zabbix6.4

MySQL rpm -qa | grep mysql #查看是否已经安装 Mysql rpm -qa | grep mariadb #查看是否已经安装 mariadb,CentOS 7可视化安装会默认安装该数据库,安装MySQL前需要卸载该数据库 rpm -e --nodeps mariadb-libs #删除mariadb数据库找到对应linux的版本进行下载 […

从零开始:Spring Boot 中使用 Drools 规则引擎的完整指南

规则引擎作用 规则引擎主要用于将业务逻辑从应用程序代码中分离出来&#xff0c;提高系统的灵活性和可维护性。规则引擎通过预定义的规则来处理输入数据并做出相应的决策&#xff0c;从而实现业务逻辑的自动化和动态调整。 例如 门店信息校验&#xff1a;美团点评在门店信息…

【高中数学之基本不等式】已知:a,b皆为正实数且1/a+1/(b+2)=1/2 求:a+b的最小值?

解&#xff1a;先从1/a1/(b2)1/2 入手&#xff0c;看能否化二为一&#xff08;将两变量化成一个变量&#xff09; 由1/a1/(b2)1/2 两边通分得(b2a)/a/(b2)1/2 交叉相乘得2a2b4ab2a 最后得到a24/b 所以ab24/bb 此时已经可以用基本不等式了 ab24/bb>22*根号下(4/b*b)22…

SpringBoot 3.3.1 + Minio 实现极速上传和预览模式

统一版本管理 <properties><minio.version>8.5.10</minio.version><aws.version>1.12.737</aws.version><hutool.version>5.8.28</hutool.version> </properties><!--minio --> <dependency><groupId>io.m…

Arduino - TM1637 4 位 7 段显示器

Arduino - TM1637 4 位 7 段显示器 Arduino-TM1637 4 位 7 段显示器 A standard 4-digit 7-segment display is needed for clock, timer and counter projects, but it usually requires 12 connections. The TM1637 module makes it easier by only requiring 4 connectio…