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

【力扣】数组中的第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

题目链接:. - 力扣(LeetCode)

 二、解题思路

1、随机选择基准元素

2、根据基准元素将数组分为三部分:[l, left](该部分小于基准元素key)、[left + 1, right - 1](等于基准元素key)、[right, r](大于基准元素key)。

3、计算每部分所包含的元素个数,分别为a 、b = right - left - 1、 c = r - right + 1;

4、分情况讨论:

三、代码

class Solution {public int findKthLargest(int[] nums, int k) {return qsort(nums, 0, nums.length-1, k);}private int qsort(int[] nums, int l, int r, int k) {if(l == r) {return nums[l];}//随机选择基准元素int key = nums[new Random().nextInt(r-l+1) + l];//根据基准元素将数组划分为三组int left = l-1, right = r+1, i = l;while(i < right) {if(nums[i] < key) {swap(nums, ++left, i++);} else if(nums[i] == key) {i++;} else {swap(nums, --right, i);}}//分情况讨论int b = right - left - 1, c = r - right + 1;if(c >= k) {return qsort(nums, right, r, k);} else if(b + c >= k) {return key;} else {return qsort(nums, l, left, k - b - c);}}private void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

 

相关文章:

【力扣】数组中的第K个最大元素

一、题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…...

WTM的项目中EFCore如何适配人大金仓数据库

一、WTM是什么 WalkingTec.Mvvm框架&#xff08;简称WTM&#xff09;最早开发与2013年&#xff0c;基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低&#xff0c;代码风格不统一的问题。2017年9月&#xff0c;将代码移植到了.Net Core上&…...

互联网3.0时代的变革者:华贝甄选大模型创新之道

在当今竞争激烈的商业世界中&#xff0c;华贝甄选犹如一颗璀璨的明星&#xff0c;闪耀着独特的光芒。 华贝甄选始终将技术创新与研发视为发展的核心驱动力。拥有先进的研发团队和一流设施&#xff0c;积极探索人工智能、大数据、区块链等前沿技术&#xff0c;为用户提供高性能…...

Tomcat的安全配置

1、生产环境优化 2、部分漏洞修复 转载自风险评估&#xff1a;Tomcat的安全配置&#xff0c;Tomcat安全基线检查加固-CSDN博客...

[笔记] 卷积 - 01 变速箱需要放置多少个加速度传感器?

1.讨论范围 本帖主要对卷积运算的过程和物理意义进行基本的展开&#xff0c;不涉及具体的验算过程。 最终所要达成的目标是&#xff0c;能够自然地判断某种物理现象或者某个测量目标是否与卷积运算有关&#xff0c;以及如何进行测量&#xff0c;搜集数据&#xff0c;调用三方…...

Maya崩溃闪退常见原因及解决方案

Autodesk Maya 是一款功能强大的 3D 计算机图形程序&#xff0c;被电影、游戏和建筑等各个领域的设计师广泛使用。然而&#xff0c;Maya 就像任何其他软件一样可能会发生崩溃问题。在前文中&#xff0c;小编给大家介绍了3ds Max使用V-Ray渲染时的崩溃闪退解决方案&#xff1a; …...

编码与梦想:我的CSDN创作5周年

五年前的今天&#xff0c;我带着对技术的热爱和对知识的渴望&#xff0c;踏上了CSDN的创作之旅。这个平台对于我来说&#xff0c;不仅仅是一个分享和学习的场所&#xff0c;更是我成长和自我实现的见证。 机缘 记得那时&#xff0c;我正为了一个编程难题而苦恼&#xff0c;偶…...

Vue2 基础十Vuex

代码下载 Vuex 概述 组件之间共享数据的方式&#xff1a; 父组件向子组件传值&#xff0c;是以属性的形式绑定值到子组件&#xff08;v-bind&#xff09;&#xff0c;然后子组件用属性props接收。子组件向父组件传值&#xff0c;子组件用 $emit() 自定义事件&#xff0c;父组…...

【大模型】驾驭未知领域:LLM如何处理域外或无意义的提示

驾驭未知领域:LLM如何处理域外或无意义的提示 引言一、概念解析1.1 域外提示1.2 无意义提示二、LLM处理策略2.1 上下文推断2.2 缺省回答2.3 模糊处理2.4 求助于常识三、实例对比3.1 域外提示实例3.2 无意义提示实例四、挑战与局限五、未来展望六、结语附录:术语解释与参考资料…...

Docker容器 为MySQL创建新用户和授权

当您需要为 MySQL 数据库创建一个新用户并配置其访问权限时&#xff0c;可以按照以下步骤操作。我将创建一个名为 newuser 的新用户&#xff0c;并为其授予在任何主机上访问所有数据库的权限。 创建新用户和授权步骤&#xff1a; 登录到 MySQL 服务器 首先&#xff0c;使用具有…...

openssh9.8p1更新 修复漏洞(CVE-2024-6387)

2024 年 7 月&#xff0c;互联网公开披露了一个 OpenSSH 的远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;。鉴于该漏洞虽然利用较为困难但危害较大&#xff0c;建议所有使用受影响的企业尽快修复该漏洞。 centos7 为例 yum -y install gcc make openssl-devel zlib…...

超市收银系统源码

今天给大家分享一套线上线下打通的收银系统&#xff0c;安卓/win双端线下收银台&#xff0c;可DIY、多模板的三端线上小程序商城&#xff0c;除此之外ERP进销存管理、商品管理、会员营销都很完善。 重点是系统支持OEM贴牌独立部署和全开源源码&#xff0c;非常适合一些正在寻找…...

word 使用手册

word 文档中如何将下行的指定文字退格到上行中 就像是这样的 编号&#xff1a;111 密码&#xff1a;222 编号&#xff1a;123 密码&#xff1a;321 编号&#xff1a;124 密码&#xff1a;331 变成 编号&#xff1a;111密码&#xff1a;222 编号&#xff1a;123密码&#xff1…...

vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素

7、指令修饰符 &#xff08;1&#xff09;概念&#xff1a; 通过“.”指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作->简化代码 &#xff08;2&#xff09;按键修饰符 keyup.enter->键盘回车监听 &#xff08;3&#xff09;v-model修饰符 v-model.tri…...

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包&#xff0c;它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器&#xff08;javac&#xff09;、Java 运行时环境&…...

台灯护眼是真的吗?台灯怎么选对眼睛好?一文带你读懂!

近视问题&#xff0c;这一现代社会的“视力杀手”&#xff0c;正悄然影响着越来越多的人群&#xff0c;尤其是青少年群体。长时间面对电子屏幕和书本&#xff0c;加上不正确的用眼习惯&#xff0c;使得视力下降成为普遍现象。在此背景下&#xff0c;一款优质的护眼台灯显得尤为…...

【学术会议征稿】第五届计算机工程与智能控制学术会议(ICCEIC 2024)

第五届计算机工程与智能控制学术会议&#xff08;ICCEIC 2024) 2024 5th International Conference on Computer Engineering and Intelligent Control 第五届计算机工程与智能控制学术会议&#xff08;ICCEIC 2024&#xff09;将于2024年10月18日至22日在广州举办&#xff0…...

【Golang】slice切片

slice Go语言的切片是对数组的抽象。 数组的使用 package mainimport ("fmt" )// 传递固定长度的数组还是值传递的方式 func printArray(myArray [5]int) {for index, value : range myArray {fmt.Println("index:", index, "value:", value)…...

开源网安模糊测试平台SFuzz全新升级,从标准到实践助力车企安全出海

开源网安模糊测试平台SFuzz全新升级&#xff0c;参照各国相关标准要求进行针对性建设&#xff0c;可为智能网联汽车信息安全测试提供更为强大的工具支持。SFuzz向被测系统输入大量随机数据&#xff0c;模拟各种异常情况&#xff0c;可以发现被测系统内潜在的缺陷和漏洞&#xf…...

Go bytes包

bytes包 Go 语言中的 bytes 包提供了用于操作字节切片的函数集合。字节切片是 Go 语言中非常常用的数据类型&#xff0c;用于表示二进制数据或 UTF-8 编码的字符串。 bytes 包主要功能 操作和处理字节切片搜索和比较字节切片修改和分割字节切片读取和写入字节切片 使用场景 字…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...