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

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 快速选择排序
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

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

⛲ 题目描述

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

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

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

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5
示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:

1 <= k <= nums.length <= 105
-104 <= nums[i] <= 104

🌟 求解思路&实现代码&运行结果


⚡ 快速选择排序

🥦 求解思路
  1. 题目要求在一个未排序的数组中找到第 k 个最大的元素。可以通过找到第 n - k 个最小的元素来等价求解(其中 n 是数组的长度)。

  2. 基于快速选择算法:利用快速排序的分区思想,通过随机选择基准值(pivot)将数组划分为三部分:

    • 小于 pivot 的部分。

    • 等于 pivot 的部分。

    • 大于 pivot 的部分。

  3. 递归处理:

    • 如果目标索引 index 在等于 pivot 的范围内,则直接返回 pivot。

    • 如果目标索引 index 在小于 pivot 的范围内,则在左半部分递归查找。

    • 如果目标索引 index 在大于 pivot 的范围内,则在右半部分递归查找。

  4. 随机化基准值:通过随机选择基准值,避免最坏情况的时间复杂度。

  5. 有了基本的思路,接下来我们就来通过代码来实现一下。

🥦 实现代码
class Solution {public int findKthLargest(int[] nums, int k) {return minKth(nums, nums.length - k);}public static int minKth(int[] arr, int k) {return process(arr, 0, arr.length - 1, k);}public static int process(int[] arr, int L, int R, int index) {if (L == R) {return arr[L];}int pivot = arr[L + (int) (Math.random() * (R - L + 1))];int[] range = partition(arr, L, R, pivot);if (index >= range[0] && index <= range[1]) {return arr[index];} else if (index < range[0]) {return process(arr, L, range[0] - 1, index);} else {return process(arr, range[1] + 1, R, index);}}public static int[] partition(int[] arr, int L, int R, int pivot) {int less = L - 1;int more = R + 1;int cur = L;while (cur < more) {if (arr[cur] < pivot) {swap(arr, ++less, cur++);} else if (arr[cur] > pivot) {swap(arr, cur, --more);} else {cur++;}}return new int[] { less + 1, more - 1 };}public static void swap(int[] arr, int i1, int i2) {int tmp = arr[i1];arr[i1] = arr[i2];arr[i2] = tmp;}}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

相关文章:

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

【Flink系列】10. Flink SQL

10. Flink SQL Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08…...

JavaScript网页设计案例-JavaScript实现数据脱敏的几种解决方式

数据脱敏是指对数据进行处理&#xff0c;使其在不改变原始数据含义的前提下&#xff0c;降低数据泄露的风险&#xff0c;保护用户隐私。 案例&#xff1a;JavaScript实现数据脱敏 1. 掩码脱敏 掩码脱敏是通过替换或隐藏数据中的部分字符来达到脱敏的效果。常见的掩码方式包括…...

第12篇:从入门到精通:掌握python高级函数与装饰器

第12篇&#xff1a;高级函数与装饰器 内容简介 本篇文章将深入探讨Python中的高级函数与装饰器。您将学习什么是高阶函数&#xff0c;掌握常用的高阶函数如map、filter、reduce的使用方法&#xff1b;理解闭包的概念及其应用&#xff1b;深入了解装饰器的定义与使用&#xff…...

审计文件标识作为水印打印在pdf页面边角

目录 说明 说明 将审计文件的所需要贴的编码直接作为水印贴在页面四个角落&#xff0c;节省辨别时间 我曾经写过一个给pdf页面四个角落加上文件名水印的python脚本&#xff0c;现在需要加一个图形界面进一步加强其实用性。首先通过路径浏览指定文件路径&#xff0c;先检测该路…...

leetcode416.分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2&…...

使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用

首先服务器上需要安装docker已经docker-compose&#xff0c;如果没有&#xff0c;可以参考我之前写的文章进行安装。 https://blog.csdn.net/a_lllk/article/details/143382884?spm1001.2014.3001.5502 1.下载并启动elk容器 先创建一个网关&#xff0c;让所有的容器共用此网…...

深度学习中超参数

深度学习中的超参数(hyperparameters)是决定网络结构的变量(例如隐藏层数量)和决定网络训练方式的变量(例如学习率)。超参数的选择会显著影响训练模型所需的时间&#xff0c;也会影响模型的性能。超参数是在训练开始之前设置的&#xff0c;而不是从数据中学习的参数。超参数是模…...

[JavaScript] 运算符详解

文章目录 算术运算符&#xff08;Arithmetic Operators&#xff09;注意事项&#xff1a; 比较运算符&#xff08;Comparison Operators&#xff09;注意事项&#xff1a; 逻辑运算符&#xff08;Logical Operators&#xff09;短路运算&#xff1a;逻辑运算符的返回值&#xf…...

Hooks 使用规则

Hooks 使用规则 命名规则 Hook 必须 useXxx 格式来命名。 PS&#xff1a;这种命名规则也很易读&#xff0c;简单粗暴 调用位置 Hook 或自定义 Hook &#xff0c;只能在两个地方被调用 组件内部其他 Hook 内部 组件外部&#xff0c;或一个普通函数中&#xff0c;不能调用…...

Ubuntu 24.04 LTS 安装 Docker Desktop

Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版&#xff08;1h速通&#xff09; Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…...

智能创造的幕后推手:AIGC浪潮下看AI训练师如何塑造智能未来

文章目录 一、AIGC时代的算法与模型训练概览二、算法与模型训练的关键环节三、AI训练师的角色与职责四、AI训练师的专业技能与素养五、AIGC算法与模型训练的未来展望《AI训练师手册&#xff1a;算法与模型训练从入门到精通》亮点内容简介作者简介谷建阳 目录 《AI智能化办公&am…...

从 JIRA 数据到可视化洞察:使用 Python 创建自定义图表

引言 在项目管理和软件开发中&#xff0c;JIRA 是最广泛使用的工具之一&#xff0c;尤其是在追踪问题、任务和团队进度方面。对于开发者和团队来说&#xff0c;能够从 JIRA 中提取并分析数据&#xff0c;以便更好地理解项目状态和趋势&#xff0c;至关重要。虽然 JIRA 本身提供…...

【网络原理】万字详解 HTTP 协议

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. HTTP 前置知识1.1 HTTP 是什么1.2 HTPP 协议应用场景1.3 HTTP 协议工作过程 2. HTTP 协议格式2.1 fiddler…...

PHP企业IM客服系统

&#x1f4ac; 企业IM客服系统——高效沟通&#xff0c;无缝连接的智慧桥梁 &#x1f680; 卓越性能&#xff0c;释放无限可能 在瞬息万变的商业环境中&#xff0c;我们深知沟通的力量。因此&#xff0c;基于先进的ThinkPHP5框架与高性能的Swoole扩展&#xff0c;我们匠心独运…...

Linux操作系统的灵魂,深度解析MMU内存管理

在计算机的奇妙世界里&#xff0c;我们每天使用的操作系统看似流畅自如地运行着各类程序&#xff0c;背后实则有着一位默默耕耘的 “幕后英雄”—— 内存管理单元&#xff08;MMU&#xff09;。它虽不常被大众所熟知&#xff0c;却掌控着计算机内存的关键命脉&#xff0c;是保障…...

PHP代码审计学习01

目录 两种思路 addslashes函数和magic_quotes_gpc配置&#xff1a; 今天来开php代码审计。 PHP无框架项目SQL注入挖掘技巧。 可以看看小迪老师的学习流程或者说是路线吧。 其中&#xff0c;最下面的代码审计工具推荐用下面两款&#xff0c;fortify&#xff0c;seay。 &…...

《数据思维》之数据可视化_读书笔记

文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 数据之道&#xff0c;路漫漫其修远兮&#xff0c;吾将上下而求索。 一、数据可视化 最基础的数据可视化方法就是统计图。一个好的统计图应该满足四个标准&#xff1a;准确、有…...

深度学习常见术语解释

正例与负例&#xff1a; 在分类任务中&#xff0c;通常将目标类别称为正例&#xff08;positive&#xff09;&#xff0c;非目标类别称为负例&#xff08;negative&#xff09;。 True Positives&#xff08;TP&#xff09;&#xff1a; 被正确地划分为正例的个数&#xff0c;…...

重温STM32之环境安装

缩写 CMSIS&#xff1a;common microcontroller software interface standard 1&#xff0c;keil mdk安装 链接 Keil Product Downloads 安装好后&#xff0c;开始安装平台软件支持包&#xff08;keil 5后不在默认支持所有的平台软件开发包&#xff0c;需要自行下载&#…...

数据库对象实例化流程模板 + 常见错误

目录 一. 数据库建表 二. 创建实体类 2.1 字段类型与数据库类型对应关系 2.2 常用注解 2.3 示例 三. 创建 Mapper 接口 四. 创建 Mapper XML 映射文件 五. 配置application.yml 六. 编写测试用例 在Java项目中操作数据库要先将数据库对象实例化&#xff0c;其流程通常…...

用字节扣子工作流,5分钟把小说变成AI解说视频(附完整流程)

5分钟零代码实战&#xff1a;用字节扣子工作流将小说变身高流量解说视频 在短视频内容爆炸的时代&#xff0c;"一口看完XX小说"这类AI解说视频正以惊人的速度占领抖音、B站的流量高地。作为个人创作者&#xff0c;你是否也想过批量生产这类内容&#xff0c;却苦于剪辑…...

丹青识画系统C语言基础集成示例:轻量级嵌入式图像处理接口

丹青识画系统C语言基础集成示例&#xff1a;轻量级嵌入式图像处理接口 最近在做一个智能门禁的项目&#xff0c;需要在树莓派这类小设备上跑图像识别。找了一圈&#xff0c;发现很多现成的AI模型库要么太臃肿&#xff0c;要么对C语言支持不友好&#xff0c;部署起来特别麻烦。…...

生态环评实战指南:遥感解译、生物多样性建模与景观格局分析技术全流程

1. 生态环评技术框架解析 生态环评就像给地球做体检&#xff0c;需要一套系统化的检查流程。我参与过多个复合型项目评估&#xff0c;发现最关键的环节往往在前期框架搭建。最新技术导则要求采用"陆域-水域"一体化评估模式&#xff0c;这意味着我们需要同时关注森林、…...

低空防御新利器:轻型雷视一体低空探测系统

...

局域网聊天工具选型:为什么企业办公场景更青睐 BeeWorks? - BeeWorks

在制造、政务、军工、大型集团等行业中&#xff0c;内网隔离、无外网办公已成为常态&#xff0c;一款专业的局域网聊天工具成为刚性需求。不同于依赖公有云服务器的通用即时通讯软件&#xff0c;局域网聊天工具将数据传输与存储完全限定在企业内部网络&#xff0c;从物理层面杜…...

Polaris流量控制实战:5种负载均衡策略与智能路由配置

Polaris流量控制实战&#xff1a;5种负载均衡策略与智能路由配置 【免费下载链接】polaris Service Discovery and Governance Platform for Microservice and Distributed Architecture 项目地址: https://gitcode.com/gh_mirrors/pol/polaris Polaris作为微服务和分布…...

强力解锁Unity开发:Zenject依赖注入框架的5大实战优势

强力解锁Unity开发&#xff1a;Zenject依赖注入框架的5大实战优势 【免费下载链接】Zenject Dependency Injection Framework for Unity3D 项目地址: https://gitcode.com/gh_mirrors/ze/Zenject Zenject是Unity3D生态中最强大的依赖注入框架&#xff0c;它通过解耦组件…...

OpenClaw人人养虾:语音唤醒

Voice Wake&#xff08;语音唤醒&#xff09;功能允许你通过说出唤醒词来激活 Agent&#xff0c;类似于 "Hey Siri" 或 "小爱同学"。唤醒前设备处于低功耗监听状态&#xff0c;唤醒后进入对话模式。 工作原理 低功耗监听 → 检测到唤醒词 → 激活 Agent …...

从CubeMX到AC6:STM32H743的MPU与分散加载文件(.sct)配置避坑全记录(LWIP+FreeRTOS)

STM32H743网络协议栈实战&#xff1a;LWIPFreeRTOS在AC6编译器下的MPU与分散加载配置指南 1. 复杂存储架构下的开发挑战 STM32H7系列微控制器以其高性能和丰富的外设资源著称&#xff0c;但其复杂的存储架构也给开发者带来了不小的挑战。该系列芯片采用多总线矩阵和多种内存类型…...