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

【Hot100】LeetCode—215. 数组中的第K个最大元素

目录

  • 1- 思路
    • 快速选择
  • 2- 实现
    • 215. 数组中的第K个最大元素——题解思路
  • 3- ACM实现


  • 原题连接:215. 数组中的第K个最大元素

1- 思路

快速选择

  • 第 k 大的元素的数组下标: int target = nums.length - k

1- 根据 partition 分割的区间来判断当前处理方式

  • 如果返回的 int 等于 target 说明找到了,直接返回
  • 如果返回的 int 小于 target 说明要在当前区间的右侧寻找,也就是 [pivotIndex+1,right]
  • 如果返回的 int 大于 target 说明要在当前区间的左侧寻找,也就是 [left,pivotIndex-1]

2- 实现 partition 随机选取一个 pivotIndex 分割区间

  • 2-1 随机选择一个下标
  • 2-2 交换 left 和 随机下标
  • 2-3 将随机下标的元素值设置为 pivot
  • 2-4 定义 lege 下标 使用 while(true)
    • 使得 le 指向的元素始终小于 pivot
    • 使得 ge 指向的元素始终大于 pivot

2- 实现

215. 数组中的第K个最大元素——题解思路

在这里插入图片描述

import java.util.Random;
class Solution {static Random random = new Random(System.currentTimeMillis());public int findKthLargest(int[] nums,int k){return quickSelect(nums,0,nums.length-1,nums.length-k);}public int quickSelect(int[] nums,int left,int right,int kIndex){if(right==left){return nums[left];}//int pivotIndex = partition(nums,left,right);if(pivotIndex == kIndex){return nums[kIndex];}else if( pivotIndex>kIndex){return quickSelect(nums,left,pivotIndex-1,kIndex);}else{return quickSelect(nums,pivotIndex+1,right,kIndex);}}public int partition(int[] nums,int left,int right){int randomIndex = left + random.nextInt(right-left+1);swap(nums,left,randomIndex);int mid = nums[left];int le = left+1;int ge = right;while(true){while(le<=ge && nums[le] < mid){le++;}while(le<=ge && nums[ge] > mid){ge--;}if(le>=ge){break;}swap(nums,le,ge);le++;ge--;}swap(nums,left,ge);return ge;}public void swap(int[] nums,int left,int right){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;}}

3- ACM实现

public class kthNums {static Random random = new Random(System.currentTimeMillis());public static int findK(int[] nums,int k){// 快速选择 ,传四个参数return quickSelect(nums,0,nums.length-1,nums.length-k);}public static int quickSelect(int[] nums,int left,int right,int kIndex){if(right==left){return nums[left];}//int pivotIndex = partition(nums,left,right);if(pivotIndex == kIndex){return nums[kIndex];}else if( pivotIndex>kIndex){return quickSelect(nums,left,pivotIndex-1,kIndex);}else{return quickSelect(nums,pivotIndex+1,right,kIndex);}}public static int partition(int[] nums,int left,int right){int randomIndex = left + random.nextInt(right-left+1);swap(nums,left,randomIndex);int mid = nums[left];int le = left+1;int ge = right;while(true){while(le<=ge && nums[le] < mid){le++;}while(le<=ge && nums[ge] > mid){ge--;}if(le>=ge){break;}swap(nums,le,ge);le++;ge--;}swap(nums,left,ge);return ge;}public static void swap(int[] nums,int left,int right){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();String[] parts = input.split(" ");int[] nums = new int[parts.length];for(int i = 0 ; i < nums.length ; i++){nums[i] = Integer.parseInt(parts[i]);}System.out.println("输入K");int k = sc.nextInt();System.out.println("结果是"+findK(nums,k));}
}

相关文章:

【Hot100】LeetCode—215. 数组中的第K个最大元素

目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接&#xff1a;215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标&#xff1a; int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…...

pycharm如何安装selenium

在pycharm中打开一个项目后,点击Setting(ALTCtrlS快捷键) 然后点击install package完成后点击关闭这个窗口,就可以在代码中使用selenium了 成功后出现如下界面 编写一段正常可以运行操作chorme浏览器的 from selenium import webdriver # 指定ChromeDriver的路径driver we…...

css三点闪烁(可用于加载样式、标题等)

代码案例 HTML <div class"flexAlign loading"><div class"loading_item"></div><div class"loading_item"></div><div class"loading_item"></div> </div> <div class"ot…...

支持向量机 (Support Vector Machines, SVM)

支持向量机 (Support Vector Machines, SVM) 通俗易懂算法 支持向量机&#xff08;SVM&#xff09;是一种用于分类和回归任务的机器学习算法。在最简单的情况下&#xff0c;SVM是一种线性分类器&#xff0c;适用于二分类问题。它的基本思想是找到一个超平面&#xff08;在二维…...

上海市计算机学会竞赛平台2024年8月月赛丙组调和级数

题目描述 给定一个整数 nn&#xff0c;记 ⌊x⌋⌊x⌋ 表示不超过实数 xx 的最大整数&#xff0c;请求出 ⌊n1⌋⌊n2⌋⌊n3⌋⋯⌊nn−1⌋⌊nn⌋⌊1n​⌋⌊2n​⌋⌊3n​⌋⋯⌊n−1n​⌋⌊nn​⌋ 输入格式 单个整数&#xff1a;表示 nn 输出格式 单个整数&#xff1a;表示答…...

【重学 MySQL】二十、运算符的优先级

【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级&#xff08;由高到低&#xff09;注意事项示例 在 MySQL 中&#xff0c;运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…...

十种优化MySQL数据库的最佳建议

优化MySQL数据库可以提高查询性能和系统响应能力&#xff0c;以下是一些MySQL数据库优化的建议&#xff1a; 优化查询语句&#xff1a;避免使用SELECT *&#xff0c;只选择需要的字段&#xff1b;使用索引来加快查询速度&#xff1b;避免使用慢查询。 优化表结构&#xff1a;使…...

springboot组件使用-mybatis组件使用

文章目录 springboot使用mybatis组件1. 添加依赖2. 配置数据源3. 创建实体类4. 创建Mapper接口5. 创建Mapper XML文件6. 使用Mapper7. 启动类配置 mybtis 动态SQL1. Mapper 注解2. Select 注解3. Insert 注解4. Update 注解5. Delete 注解6. Results 注解7. Param 注解8. Cache…...

Ribbon 源码分析【Ribbon 负载均衡】

前言 在 Spring Cloud 2020 版本以后&#xff0c;移除了对 Netflix 的依赖&#xff0c;也就移除了负载均衡器 Ribbon&#xff0c;Spring Cloud 官方推荐使用 Loadbalancer 替换 Ribbon&#xff0c;而在 LoadBalancer 之前 Spring Cloud 一直使用的是 Ribbon 来做负载[均衡器的…...

Python | Leetcode Python题解之第385题迷你语法分析器

题目&#xff1a; 题解&#xff1a; class Solution:def deserialize(self, s: str) -> NestedInteger:if s[0] ! [:return NestedInteger(int(s))stack, num, negative [], 0, Falsefor i, c in enumerate(s):if c -:negative Trueelif c.isdigit():num num * 10 int…...

进程间通信-进程池

目录 理解​ 完整代码 完善代码 回收子进程&#xff1a;​ 不回收子进程&#xff1a; 子进程使用重定向优化 理解 #include <iostream> #include <unistd.h> #include <string> #include <vector> #include <sys/types.h>void work(int rfd) {…...

【PYTHON 基础系列-request 模块介绍】

一、requests库简介 使用requests库能快速构建 HTTP 请求&#xff0c;而无需深入了解底层网络协议细节。其API设计直观&#xff0c;使得发送请求就像调用函数一样简单&#xff0c;同时提供了丰富的选项以满足复杂网络交互的需求。这种设计使得无论是初学者还是经验丰富的开发者…...

springboot 实现策略模式通过id进入不同的服务类service

在Spring Boot中实现策略模式&#xff0c;通常是将不同的算法封装在单独的类中&#xff0c;并使它们可以相互替换。这些类通常都实现同一个接口。在Spring Boot应用中&#xff0c;你可以通过Spring的依赖注入&#xff08;DI&#xff09;来管理这些策略类的实例&#xff0c;并通…...

AUC真的什么情形下都适合吗

AUC(Area Under the ROC Curve)是一个广泛使用的性能评价指标,它衡量了分类模型在不同阈值下区分正类和负类的能力。然而,在某些情况下,AUC可能不是最准确的评价指标,以下是几种可能的情况: 数据极度不均衡:在数据极度不均衡的情况下,即使模型只预测多数类,AUC也可能…...

Flutter基本组件Text使用

Text是一个文本显示控件&#xff0c;用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…...

DDS基本原理--FPGA学习笔记

DDS信号发生器原理&#xff1a; timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2024/09/04 15:20:30 // Design Name: hilary // Module Name: DDS_Module //module DDS_Module(Clk,Reset_n,Fword,Pword,Data);input Clk;input Reset_n;input [31:0]…...

有temp表包含A,B两列,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数

有temp表&#xff0c;使用SQL&#xff0c;对B列进行处理&#xff0c;形成C列&#xff0c;按A列顺序&#xff0c;B列值不变&#xff0c;则C列累计技术&#xff0c;B列值变化&#xff0c;则C列重新开始计数 建表语句如下 CREATE TABLE temp(A STRING ,B STRING );INSERT INTO …...

【H2O2|全栈】关于HTML(6)HTML基础(五 · 完结篇)

HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类&#xff08;五&#xff09; 本文中的标签在什么位置中使用&#xff1f; 表单&#xff08;二&#xff09; 下拉选择菜单 文本域 案例 拓展标签 iframe框架 案例 预告和回顾 后话 前言 本系列博客介…...

2024第三届大学生算法大赛 真题训练一 解题报告 | 珂学家

前言 题解 这是第三届大学生算法大赛(第二届为清华社杯)的赛前练习赛一. 这是上界比赛的体验报告: 2023第二届“清华社杯”大学生算法大赛 解题报告(流水账版) | 珂学家&#xff0c;个人还是非常推荐这个比赛。 难度分布&#xff1a;4 easy/4 mid-hard/2 hard 赛前练习赛一…...

IIS网站允许3D模型类型的文件

参与threejs项目的研发&#xff0c;本地开发完成后&#xff0c;发布后使用时发现模型文件不能正常获取资源&#xff0c;原因是IIS站点默认不支持模型类型。 一开始是通过直接在IIS网站管理中的类型添加来实现网站对类型的支持。 后来发现一段对于后端来说可以直接实现代码上添加…...

白嫖Codex!一行代码不花接入国产DeepSeek-v4-pro,从此告别ChatGPT月费

Codex 如何接入国产模型 DeepSeek-v4-pro 保姆级教程 使用 Claude Code、Codex 已经好几个月了&#xff0c;不得不感叹现在的 AI 工具真的太强大了。目前市面上很多 Claude Code 如何接入大模型的教程&#xff0c;但 Codex 却比较少&#xff0c;一方面因为 Codex 需要 ChatGPT …...

第5章 薪资重构——AI时代的程序员价值重估

第5章 薪资重构——AI时代的程序员价值重估 核心问题:AI时代,程序员的薪资会发生怎样的变化?哪些人在涨薪?哪些人在降薪? 5.1 问题定义:薪资分化的真相是什么? 5.1.1 一个令人震惊的数据 2026年第一季度,一个对比让整个技术圈哗然: 同一家公司内部: - 一个AI方向…...

如何在macOS上免费安装HSTracker:终极炉石传说套牌追踪器完整指南

如何在macOS上免费安装HSTracker&#xff1a;终极炉石传说套牌追踪器完整指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 还在为炉石传说对局中记不住对手出牌而烦恼…...

SillyTavern桌面版终极指南:三步打造你的专属AI聊天桌面应用

SillyTavern桌面版终极指南&#xff1a;三步打造你的专属AI聊天桌面应用 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 还在为复杂的命令行启动和浏览器标签混乱而烦恼吗&#xff1f;Sill…...

Go语言单元测试:testing框架

Go语言单元测试&#xff1a;testing框架 1. 测试基础 func TestAdd(t *testing.T) {if Add(1, 2) ! 3 {t.Error("Add failed")} }2. 总结 单元测试是保证代码质量的基础&#xff0c;Go语言内置testing框架。...

崩坏星穹铁道自动化终极指南:3分钟学会解放双手的游戏助手

崩坏星穹铁道自动化终极指南&#xff1a;3分钟学会解放双手的游戏助手 【免费下载链接】StarRailAssistant 崩坏&#xff1a;星穹铁道自动化 | 崩坏&#xff1a;星穹铁道自动锄大地 | 崩坏&#xff1a;星穹铁道锄大地 | 自动锄大地 | 基于模拟按键 项目地址: https://gitcode…...

STM32中断优先级到底怎么分?用医生叫号系统讲透NVIC抢占与响应优先级

STM32中断优先级到底怎么分&#xff1f;用医生叫号系统讲透NVIC抢占与响应优先级 在嵌入式系统开发中&#xff0c;实时响应能力往往是衡量系统性能的关键指标。想象一下&#xff0c;当您正在全神贯注地编写代码时&#xff0c;突然手机来电、微信消息和邮件通知同时响起——您会…...

【数据库篇|MySQL】事务

一.定义事务&#xff08;Transaction&#xff09;是把一组 SQL 操作当作一个逻辑单元来执行&#xff0c;要么全部成功&#xff0c;要么全部失败回滚&#xff0c;以此保证数据的一致性和完整性。二.事务的四大特性&#xff08;ACID&#xff09;原子性&#xff08;Atomicity&…...

多模态融合在死因推断中的应用:特征级与决策级融合策略对比

1. 项目概述&#xff1a;当AI遇见死因推断&#xff0c;多模态融合如何破局&#xff1f;在公共卫生和流行病学领域&#xff0c;准确推断死因&#xff08;Cause of Death, COD&#xff09;是评估疾病负担、制定卫生政策的基础。然而&#xff0c;在资源有限的地区&#xff0c;获取…...

Rocky Linux 9.2 安装避坑指南:解决UEFI引导、分区加密、安装黑屏等常见问题

Rocky Linux 9.2 实战安装排雷手册&#xff1a;从UEFI配置到疑难解析当CentOS转向Stream分支后&#xff0c;Rocky Linux凭借其与RHEL的二进制兼容性和稳定的发布周期&#xff0c;迅速成为企业级环境的首选替代方案。但在实际安装过程中&#xff0c;即便是经验丰富的系统管理员也…...