蓝桥杯---数组里面的第k大的元素(leetcode第215题)题解

server/2025/3/1 5:20:49/

文章目录

  • 1.题目重现
  • 2.案例说明
  • 3.思路介绍
  • 4.代码分析

1.题目重现

之前是对于数组排序,找出来这个数组里面的最大的或者是最小的元素,但是这个题目是找出来排序之后的这个数组里面的第k大的元素;

2.案例说明

我觉得这个题目上面的解释足够清楚,这个案例也就没什么好说的,其实是很容易理解的:

就是给我们传递进来一个数组,我们需要在这个数组里面的这么多个数字里面找到第K大的元素;

3.思路介绍

思路就是数组分为三块,随机的进行基准元素的选择:

其实现在回想起来,这个思路贯穿了始终,从我们的最开始的那个颜色的分类问题,就是0,1,2我们是有基准元素的,到后来的这个快速排序算法,再到现在的这个topK问题,也就是最大的第K个元素,实际上我们都是利用的这个数组划分为三块的这个思想;

因为我们是把这个数组划分了三个部分,也就是数组分为三块,因此我们的这个topK最首要的问题就是需要知道我们找的这个topk元素在我们的这个数组里面的哪一个位置,也就是三块里面的那一块里面;

我们的思路就是下面的这个里面写的a,b,c就是分别计算出来每一块里面的元素的数据个数,和我们的这个K进行比较,确定这个topK元素在我们的数组里面的什么位置

因为这个按照数组分三块快排之后,这个数组是升序的,所以我们找的是topK,应该是从这个数组的大元素开始找,我们首先让这个c和k进行比较,如果c>=k,这个就意味着我们的这个元素就是在第三块里面的,我们在这个right,r区间里面去寻找第k大的元素就可以了;

以此类推,如果是在第二块里面的话,因为全部都是等于我们的key,直接返回这个基准元素就可以了;

上面的两个情况都不满足的情况下,这个时候就需要在我们的最左边的那一块里面去找地k-b-c大的元素;

4.代码分析

下面的这个findKlargest函数就是去寻找我们的数组里面的这个最大的元素

  • 总体来看,就是调用qsort函数,然后我们去实现这个函数,函数里面的数组分三块的时候涉及到了数据元素的交换,然后我们实现了一个swap函数;

  • 其实这个里面最主要的就是我们的qsort这个函数,这个函数里面主要就是包含了三个步骤,分别是我们的随机选择基准元素,数组分三块,分类讨论;

  • 随机选择基准元素是为了让这个时间复杂度降低到最少,这个具体原理可以参考《算法导论》这本书籍;数组分三块,已经不是我们第一次使用了,之前的那个快排里面进行了详细的介绍(可参考我之前的文章),分类讨论,就是确定我们的这个topk位于我们的数组分三块;里面的哪一块里面;


http://www.ppmy.cn/server/171150.html

相关文章

Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family

在Linux内核中开发自定义协议族需要深入理解网络协议栈的分层模型。net_device_ops、proto_ops和net_proto_family是三个关键结构体,分别作用于不同的层次。本文将详细解析它们的作用、交互关系及实现方法,并提供一个完整的开发框架。 一、核心结构体的作用与层级关系 struct…

爬虫基础入门之爬取豆瓣电影Top250-Re正则的使用

网址:豆瓣电影 Top 250 本案例所需要的模块 requests (用于发送HTTP请求)re (用于字符串匹配和操作) 确定需要爬取的数据 : 电影的名称电影的年份电影的评分电影评论人数 一. 发送请求 模拟浏览器向服务器发送请求 准备工作 -分析页面: F12 or 右击点击检查 查看…

蓝桥杯训练 补题

P8605 [蓝桥杯 2013] 网络寻路 这个题之前写过,但是后面数据加强了,直接dfs是会超时的,这是就要用另外的解法了,题目要求只要三条边,那么就可以找中间的边,对于每组边,把他们作为中间边&#xf…

spring boot 连接FTP实现文件上传

spring boot 连接FTP实现文件上传 maven&#xff1a; <!--ftp--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency>接口示例&#xff1a; ApiO…

本地部署 DeepSeek-R1大模型详细教程(桌面客户端美观UI)

大家好&#xff01;今天我来分享一篇超级详细的教程&#xff0c;教你如何在本地部署 DeepSeek-R1 大模型&#xff0c;让你的电脑也能成为一个强大的 AI 工作站&#xff01;这篇文章会从零开始&#xff0c;手把手带你完成所有步骤&#xff0c;适合小白操作。废话不多说&#xff…

智合同:数字化转型下的法律科技新引擎

在数字化转型的浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;技术正深刻改变各行各业的运作方式&#xff0c;法律领域也不例外。作为法律科技的重要组成部分&#xff0c;“智合同”&#xff08;合同智能应用品牌&#xff0c;数字化工具&#xff09;正在成为企业降本增…

SeaCMS V9海洋影视管理系统报错注入

漏洞背景 SQL 注入攻击是当前网络安全中最常见的一种攻击方式&#xff0c;攻击者可以利用该漏洞访问或操作数据库&#xff0c;造成数据泄露或破坏。通常发生在开发人员未能正确处理用户输入时。 在 SeaCMS V9 中&#xff0c;用户输入&#xff08;如登录、评论、分页、ID 等&a…

机器学习--(随机森林,线性回归)

一、集成学习方法之随机森林 集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话&#xff1a;三个臭皮匠&#xff0c;赛过诸葛亮。集成算法大致可以分为&#xff1a;Bagging&#xff0c;B…