日做力扣题2--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
思路:
快速选择算法的基本思想是通过选择一个“基准”(pivot)元素,将数组分成两部分:一部分包含所有小于基准的元素,另一部分包含所有大于基准的元素。然后,根据k的值,递归地在包含第k大元素的那一部分继续执行,直到找到第k大的元素。
设置两个函数:
quickselect():
函数逻辑:
-
基准情况处理:如果左边界等于右边界,意味着当前考虑的数组段仅包含一个元素。尽管此时
k
的值并不重要(因为只有一个元素可选),但为了保持递归逻辑的一致性,我们仍返回nums[k]
。在实际应用中,更清晰的写法是直接返回nums[l]
,但这里的写法在逻辑上仍然无误。 -
选择基准元素:我们选取左边界的元素
nums[l]
作为基准。同时,初始化两个指针i
和j
,分别指向左边界的左侧(i = l - 1
)和右边界的右侧(j = r + 1
)。 -
分区过程:通过两个
do-while
循环,我们将数组划分为两部分。循环结束时,所有小于基准的元素都将位于基准的左侧,而所有大于基准的元素则位于其右侧。指针i
和j
在循环中逐步逼近,直至相遇。若它们相遇前指向的元素满足交换条件(即i < j
,且nums[i]
不小于基准,nums[j]
不大于基准),则交换这两个元素。 -
递归搜索:分区完成后,我们根据
k
的值决定递归搜索的方向。由于我们寻找的是第k大的元素,且数组是按从大到小的顺序“假设排序”的,因此:- 若
k <= j
,说明第k大的元素位于基准的左侧或就是基准本身,于是我们在左半部分继续搜索。 - 若
k > j
,说明第k大的元素位于基准的右侧,于是我们在右半部分继续搜索
- 若
findKthLargest():
函数逻辑:
-
计算数组大小:首先,我们计算数组
nums
的大小n
。 -
调用
quickselect
函数:由于quickselect
函数期望的k
参数是基于0的索引,而题目要求的k
是基于1的排名,因此我们需要将k
转换为对应的索引值。这通过n - k
实现,因为排序后的数组中第k大的元素将位于索引n - k
处(数组从0开始索引)。 -
返回结果:
quickselect
函数返回第k大的元素的值,我们将其直接返回作为findKthLargest
函数的结果。
代码:
class Solution {
public:// 快速选择算法,用于找到数组中第k大的元素int quickselect(vector<int>& nums, int l, int r, int k) {// 基本情况:如果左边界等于右边界,说明只剩一个元素,直接返回该元素if (l == r)return nums[k]; // 注意这里的k实际上是一个误导,因为当l==r时,k的值并不重要,返回nums[l]即可// 但由于我们的递归调用中k表示的是目标元素的索引(基于0),所以这里为了保持一致也写为nums[k],// 实际上在l==r的情况下,这个k值会被忽略,因为只会有一个元素被返回。// 更好的做法是返回一个明确的值或者修改函数签名以避免这种混淆。// 然而,在这个特定的实现中,由于我们总是确保k对应于目标元素的索引(在递归调用中),// 所以这里的写法在逻辑上仍然是正确的(尽管有些混淆)。// 选择基准元素(这里选择左边界的元素),并初始化两个指针int partition = nums[l], i = l - 1, j = r + 1;// 通过两个do-while循环,将数组中小于基准的元素移动到左边,大于基准的元素移动到右边while (i < j) {do i++; while (nums[i] < partition); // 找到第一个不小于基准的元素do j--; while (nums[j] > partition); // 找到第一个不大于基准的元素// 如果找到了这样的两个元素,则交换它们if (i < j)swap(nums[i], nums[j]);}// 此时,基准元素的位置j(或j+1,取决于你如何定义分区)可以用来判断第k大的元素在哪一部分// 由于我们是从大到小排序(找第k大),所以基准元素及其左边的元素都是不小于它的,// 而右边的元素都是小于它的。因此,如果k <= j,说明第k大的元素在基准的左边或就是基准本身;// 如果k > j,说明第k大的元素在基准的右边。// 递归地在包含第k大元素的那一部分继续寻找if (k <= j) // 注意这里的j是分区后基准元素所在的位置(也是最后一个不小于基准的元素的位置)return quickselect(nums, l, j, k); // 在左半部分继续寻找elsereturn quickselect(nums, j + 1, r, k); // 在右半部分继续寻找}// 找到数组中第k大的元素int findKthLargest(vector<int>& nums, int k) {int n = nums.size();// 由于题目要求的是第k大的元素,而我们的quickselect函数是基于0索引的,// 所以我们需要将k转换为对应的索引值,即n-k(因为数组是从0开始索引的)。return quickselect(nums, 0, n - 1, n - k);}
};
相关文章:
日做力扣题2--215. 数组中的第K个最大元素
这道题我在做北京的一家教育公司的笔试时出现过,且题目里直接要求使用快排做,所以我也使用快排做的。 题目: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最…...
centos8 使用yum安装程序出现报错
在执行yum指令出现源更新不了Could not resolve host: mirrorlist.centos.org; Unknown error问题 yum -y update结果 Errors during downloading metadata for repository appstream: - Curl error (6): Couldnt resolve host name for http://mirrorlist.centos…...
linux系统搭建DNS服务器、详细知识讲解
DNS服务器系统为rocky9.5, 1、安装DNS dnf -y install bind bind-utilsbind软件包 BIND 是一个开源的 DNS 服务器软件,广泛用于域名解析服务。 配置管理: 权威 DNS 服务器(Authoritative DNS):为特定域名…...
【部署优化篇四】《DeepSeek移动端优化:CoreML/TFLite实战对比》
手机里的AI助手能秒速回答你的问题,游戏人物能实时追踪你的表情变化,这些酷炫功能的背后都离不开移动端机器学习框架的支撑。今天我们就来撕开两个当红炸子鸡框架CoreML和TFLite的神秘面纱,看看它们在模型优化这件事上到底藏着哪些独门绝技。 一、移动端优化的生存法则 在…...
DeepSeek联网搜索
deepseek 0、前言1、未联网2、联网2.1 SerpAPI2.2 SerpAPIDeepseek 0、前言 为获取最新消息,需给deepseek联网 1、未联网 from dotenv import load_dotenv from langchain_deepseek import ChatDeepSeekload_dotenv()# 1、模型 model ChatDeepSeek(model"d…...
pt100 2线和3线的区别?
3线比2线更稳定一些; 在电路中,b和c是不连接在一起的; 测试的时候,b和c是接在一起的,也就是说pt100中b和c是连接在一起的 3线比2线多一个反馈; 平时测试的时候,测试一下ab或者ac 都是一样的…...
ollama-chat-ui-vue,一个可以用vue对接ollama的开源项目,可接入deepSeek
ollama-chat-ui-vue 使用vue3 vite elementUi 搭建的前端chat,通过ollama可与模型对话,目前支持独立思考,切换模型(联网查询后续支持) github地址:ollama-chat-ui-vue 制作不易github点点star,谢谢 前置工作 安装ollama,ollama官网地址 安装完olla…...
hot100-3、438、560、239、240、160、234(2简3中1难)
滑窗问题↓ 3. 无重复字符的最长子串(中等) 方法一、滑动窗口 数组结合哈希表ascii码,滑动出口。其实可以优化为left Math.max(left,map.get(s.charAt(i)) 1),数组的话就是全部初始化为-1,用来计算最新下标而不是…...
深入理解 Java 反射机制:获取类信息与动态操作
在 Java 编程中,反射(Reflection)是一种强大的机制,允许程序在运行时动态地获取类的信息并操作类的属性、方法和构造器。反射是 Java 动态语言特性的核心,广泛应用于框架开发、插件系统、序列化和反序列化等领域。本文…...
Redis 主从复制
概念 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。Redis 也是如此,它提供了复制的功能,实现了相同数据的多个 Redis 副本,通过一个主节点(ma…...
Unity中NavMesh的使用 及其 导出给java服务端进行寻路
1.先添加 AI Navigation组件 2.Windows-->AI-->Navigation(Obsolete) 这样子就可以看到烘焙按钮 3.将物体标记为行走和不可行走 4.添加一个Plane和一些球体,并把需要形成NavMesh的物体选择为静态 // 因为只能烘焙静态的 之后可以看出烘焙后,看着被…...
【含文档+PPT+源码】基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现
项目介绍 本课程演示的是一款基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部…...
iOS App的启动与优化
App的启动流程 App启动分为冷启动和热启动 冷启动:从0开始启动App热启动:App已经在内存中,但是后台还挂着,再次点击图标启动App。 一般对App启动的优化都是针对冷启动。 App冷启动可分为三个阶段: dyld:…...
一周学会Flask3 Python Web开发-request请求钩子(Hook)
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 有时候我们业务需求对请求做一些鉴权,日志,统计分析等功能,这时候可以对请求进行预处理( …...
git clone
方法一(替换URL) git clone https://gitclone.com/github.com/tendermint/tendermint.git 方法二(设置git参数) git config --global url."https://gitclone.com/".insteadOf https:// git clone https://github.co…...
nginx ngx_http_module(8) 指令详解
nginx ngx_http_module(8) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_ssi_module:服务器端包含(SSI)模块,允许在HTML页面中插入其他内容或动态生成的内容。通过特殊的SSI指令(如 …...
Apache Struts RCE (CVE-2024-53677)
前言 对目前的Apache Struts RCE (CVE-2024-53677)的poc进行总结,由于只能单个ip验证,所以自己更改一下代码,实现:多线程读取url验证并保存,更改为中文解释 免责声明 请勿利用文章内的相关技术从事非法测试…...
windows系统本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI
本文将手把手教您使用OllamaDockerOpenWebUI三件套在本地部署DeepSeek-R1大语言模型,实现私有化AI服务搭建。 一、环境准备 1.1 硬件要求 CPU:推荐Intel i7及以上(需支持AVX2指令集) 内存:最低16GB,推荐…...
前端:最简单封装nmp插件(组件)过程。
一、nmp使用 1、注册nmp账号:npm | Home 2、创建插件名称文件夹,如: vue3-components 3、初始化一个package.json文件:nmp init npm init package.json配置用处介绍,如下: {// 包名,必须…...
百度搜索融合 DeepSeek 满血版,开启智能搜索新篇
百度搜索融合 DeepSeek 满血版,开启智能搜索新篇 🚀 🔹 一、百度搜索全量接入 DeepSeek 🔹 百度搜索迎来重要升级,DeepSeek 满血版全面上线!🎉 用户在百度 APP 搜索后,点击「AI」即…...
导出指定文件夹下的文件结构 工具模块-Python
python模块代码 import os import json import xml.etree.ElementTree as ET from typing import List, Optional, Dict, Union from pathlib import Path class DirectoryTreeExporter:def __init__(self,root_path: str,output_file: str,fmt: str txt,show_root: boo…...
V4L2驱动之UVC
以下是关于V4L2摄像头驱动框架与UVC协议的关联分析,从内核驱动到用户空间的完整视角: 1. V4L2驱动框架核心架构 关键组件: 核心层 (V4L2 Core) v4l2_device:设备的总入口,管理所有子组件video_device:对应…...
【Linux】匿名管道的应用场景-----管道进程池
目录 一、池化技术 二、简易进程池的实现: Makefile task.h task.cpp Initchannel函数: 创建任务: 控制子进程: 子进程执行任务: 清理收尾: 三、全部代码: 前言: 对于管…...
umi react+antd 判断渲染消息提示、input搜索、多选按钮组
记得map里返回的每层遍历结构都要带上key(图里没加,最近在接手react,熟悉中......
Windows桌面系统管理5:Windows 10操作系统注册表
Windows桌面系统管理0:总目录-CSDN博客 Windows桌面系统管理1:计算机硬件组成及组装-CSDN博客 Windows桌面系统管理2:VMware Workstation使用和管理-CSDN博客 Windows桌面系统管理3:Windows 10操作系统部署与使用-CSDN博客 Wi…...
华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南
本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型(14B、32B)全过程与测试结果。 NPU:910B3 (65GB) * 8 (910B 有三个版本 910B1、2、3) 模型:DeepSeek-R1-Distill-Qwen-14B、DeepSeek…...
文献阅读 250219-Global water availability boosted by vegetation-driven changes (1)
Global water availability boosted by vegetation-driven changes in atmospheric moisture transport 来自 <https://www.nature.com/articles/s41561-022-01061-7> ## Abstract: 全球水资源的可用性是气候变化研究中的重要议题,尤其是随着气候变化的加剧&a…...
蓝桥杯篇---超声波距离测量频率测量
文章目录 简介第一部分:超声波的简介工作原理1.发射超声波2.接收反射波3.计算时间差4.计算距离 硬件连接1.Trig2.Echo 示例代码代码说明注意事项1.声速2.延时精度3.硬件连接 第二部分:频率测量简介频率测量原理1.信号输入2.计数3.计算频率 硬件连接示例代…...
【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…...
LearnOpenGL——高级OpenGL(下)
教程地址:简介 - LearnOpenGL CN 高级数据 原文链接:高级数据 - LearnOpenGL CN 在OpenGL中,我们长期以来一直依赖缓冲来存储数据。本节将深入探讨一些操作缓冲的高级方法。 OpenGL中的缓冲本质上是一个管理特定内存块的对象,它…...
wangEditor 编辑器 Vue 2.0 + Nodejs 配置
资料 Vue2.0 版本的安装:https://www.wangeditor.com/v5/for-frame.html#%E4%BD%BF%E7%94%A8上传图片配置:https://www.wangeditor.com/v5/menu-config.html#%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87 安装步骤 1.安装界面基础部分 <!-- 富文本编辑器…...
机器学习·数据处理
前言 对于大规模数据,我们经常会使用python内置函数或者编写脚本进行批量化处理,从而提高后续使用算法的效率。 1. 正则表达式 定义:用于检索、替换符合某个模式的文本,是文本预处理常用技术。基本语法 符号描述.匹配除换行符 …...
如何在Bigemap Pro中用线分割面、挖空
有时候需要以一条线为界对面元素进行分割或者是需要在一个面元素里面挖空一个面形状的洞,对此需求可以使用bigemap pro工具实现,这里为你介绍一下具体的操作方法。 【一】画线分割面 第一步:现在这是一个不规则多边形,想要以手动…...
网络安全入门攻击与防御实战(四)
漏洞利用:永恒之蓝(MS17-010)与同类漏洞解析 1 永恒之蓝(MS17-010)漏洞背景 (1)漏洞信息 CVE编号:CVE-2017-0143 ~ CVE-2017-0148 影响范围:Windows XP ~ Windows 201…...
DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)
前言 在当今数字化时代,AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选。今天,就让我们一起探索如何将DeepSeek接入PyCharm,实现高效、智…...
CF1801D
CF1801D 题目大意: n n n 个顶点, m m m 条边的图。你一开始在起点 1,拥有 P P P 枚硬币,通过每条 ( i , j ) (i,j) (i,j) 边都需要花费一定的硬币 s ( i , j ) s(i,j) s(i,j)。但你在每个城市 i i i 都可以打工赚硬币 w i w…...
大厂算法面试常见问题总结:高频考点与备战指南
在大厂算法面试中,数据结构与算法是必考的核心内容。 无论是校招还是社招,算法题的表现往往决定了面试的成败。 为了帮助大家更好地备战,本文总结了大厂算法面试中的高频考点,并提供了详细的备战建议,助你轻松应对面…...
【R语言】主成分分析与因子分析
一、主成分分析 主成分分析(Principal Component Analysis, PCA)是一种常用的无监督数据降维技术,广泛应用于统计学、数据科学和机器学习等领域。它通过正交化线性变换将(高维)原始数据投影到一个新的坐标系ÿ…...
解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025
2025 年 3 月 11-13 日,全球规模最大的嵌入式展览会——Embedded World 2025 将在德国纽伦堡盛大开幕。作为物联网和嵌入式技术领域的领先企业,乐鑫信息科技 (688018.SH) 将展示在 AI LLM、HMI、双频 Wi-Fi 6、低功耗 MCU 和 Matter 等领域的最新技术及解…...
人工智能基础之数学基础:01高等数学基础
函数 极限 按照一定次数排列的一列数:“,“,…,"…,其中u 叫做通项。 对于数列{Un}如果当n无限增大时,其通项无限接近于一个常数A,则称该数列以A为极限或称数列收敛于A,否则称数列为发散, 极限值 左…...
【从0做项目】Java搜索引擎(8) 停用词表 正则
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 文章导读 零:项目结果展示 一:前引 二:停用词表 1:…...
线程和进程的区别
如果说一个服务器同一时刻收到了许多请求,针对每一个请求,操作系统都会产生一个进程,从而给这个请求提供一些服务 ,返回响应,如果请求处理完了,这个进程就要销毁了!如果请求很多的话,…...
深入理解 QObject的作用
QObject 作为 Qt 库中所有对象的基类,其地位无可替代。几乎 Qt 框架内的每一个类,无论是负责构建用户界面的 QWidget,还是专注于数据处理与呈现的 QAbstractItemModel,均直接或间接继承自 QObject。这种继承体系赋予 Qt 类库高度的…...
解码 NLP:从萌芽到蓬勃的技术蜕变之旅
内容概况: 主要讲述NLP专栏的内容和NLP的发展及其在现代生活中的广泛应用。课程强调实践为主、理论为辅的学习方法,并通过多个生活场景展示了NLP技术的实际应用,如对话机器人、搜索引擎、翻译软件、电商推荐和智能客服等。 这边我就不多做自我…...
【核心算法篇十五】《深度解析DeepSeek遗传算法:让超参数调优从“玄学”变“科学”的终极指南》
引言:超参数调优的“炼丹困局”与破局之路 在机器学习的世界里,调参工程师常被戏称为"炼丹师"——面对动辄几十个超参数的复杂模型,我们就像古代术士守着炼丹炉,不断尝试各种参数组合,期待偶然炼出"仙丹"。传统网格搜索(Grid Search)需要遍历所有可…...
Python—变量、基本数据类型、类型的转换
文章目录 Python—变量、基本数据类型1 格式化输出2 号的使用3 变量的数据类型4 type() 函数的使用5 数据类型的基本介绍5.1 int 整型5.2 float 浮点类型5.3 bool 布尔类型5.4 str 字符串类型5.5 字符串驻留机制5.6 数据类型的转换(1)隐式转换ÿ…...
启明星辰规则库下载
启明星辰规则库下载 一、脚本介绍 1、背景介绍 因为项目上有启明星辰的安全设备、并且在内网无法直接连接互联网进行在线升级,必须使用离线升级模式,下载规则库升级,每月一更有点繁琐,所以写了这个b脚本,偷懒一下&a…...
uniapp 拖拽排序
1.拖拽排序 使用 sortablejs库 npm install sortablejs --save-dev <template><view id"list"><view v-for"(item, index) in list" :key"item.id" class"item">{{ item.name }}</view></view> </t…...
测试。。。
移动到中位数位置能保证总移动距离最小,数学知识 #include <iostream> #include <vector> #include <cmath> using namespace std;int main() {int n;string s;cin >> n >> s;vector<int> positions;// 记录所有1的位置for (…...
Java常用设计模式及其应用场景
1. 什么是设计模式? 设计模式是一个经过多次验证的、针对常见问题的可复用解决方案。设计模式并不是具体的代码实现,而是给出了如何解决问题的思路和结构。在实际开发过程中,设计模式有助于开发者快速找到合适的解决方案,从而减少…...