牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】
文章目录
- 前言
- 牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】
- 题目及类型
- 思路
- 思路1:大顶堆
- 思路2:快排+二分+随机基准点
前言
博主所有博客文件目录索引:博客目录索引(持续更新)
牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】
题目及类型
相同题目:215. 数组中的第K个最大元素
题目链接:寻找第K大
题目内容:有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。
类型:大顶堆、快排+二分
思路
思路1:大顶堆
class Solution {public int findKthLargest(int[] nums, int k) {if (nums == null || nums.length == 0) {return 0;}PriorityQueue<Integer> queue = new PriorityQueue<>(k, (o1, o2)->o2.compareTo(o1));for (int i = 0; i < nums.length; i++) {queue.offer(nums[i]);}while (k > 1) {queue.poll();k--;}return queue.poll();}
}
思路2:快排+二分+随机基准点
最佳思路:快排+二分+随机基准点。在快排的过程中不断的找到对应的基准点,然后以这个基准点比较k(基准点的左边是>该基准点的,这样我们才能将基准点的索引与第k大的索引来进行比较)
思路:快排+二分+随机基准点
复杂度分析:
- 时间复杂度:O(n.logn)
- 空间复杂度:O(n)
一个探索思路的过程:
import java.util.*;public class Solution {private static int res;Private static Random random = new Ramdom();public int findKth(int[] a, int n, int K) {quickSort(a, 0, n - 1, K);return res;}public void quickSort(int[] a, int l, int r, int K) {if (l > r) {return;}int mid = partition(a, l, r);//看这个基准点与K的位置是否相符if (mid + 1 == K) {res = a[mid];}else if (mid + 1 < K) {quickSort(a, mid + 1, r, K);}else {quickSort(a, 0, mid - 1, K);}}public int partition(int[] a, int l, int r) {int x = Math.abs(random.nextInt()) % (r - l + 1) + l;swap(a, l, x);int j = l;for (int i = l + 1; i <= r; i++) {if (a[i] >= a[l]) {j++;swap(a, i, j);}}//交换基准点swap(a, l, j);return j;}public void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}
不同的分块思路:
//方式一:
public int partition(int[] a, int l, int r) {int x = Math.abs(random.nextInt()) % (r - l + 1) + l;swap(a, l, x);int j = l;for (int i = l + 1; i <= r; i++) {if (a[i] >= a[l]) {j++;swap(a, i, j);}}//交换基准点swap(a, l, j);return j;
}//方式二:
public int partition(int[] a, int l, int r) {int v = a[l];int i = l + 1;int j = r;while (true) {//目标找到小于基准值的while (i <= r && a[i] > v ) {i++;}//目标找到大于基准值的//注意:这里j>=l+1while (j >= l + 1 && a[j] < v) {j--;}if (i > j) {break;}swap(a, i, j);i++;j--;}//交换基准点swap(a, l, j);return j;
}
写的好快排方式:
class Solution {//大顶堆找public int findKthLargest(int[] nums, int k) {//由于找的是第k大,那么从小到大的顺序就是kreturn quickFind(nums, 0, nums.length - 1, nums.length - k);}public int quickFind(int[] nums, int left, int right, int k) {//基准点int x = nums[left];if (left == right) return nums[k];int i = left - 1, j = right + 1;while (i < j) {do i ++; while (nums[i] < x);do j --; while (nums[j] > x);//交换if (i < j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}//若是寻找的位置<=j,那么左范围进行递归if (k <= j) {return quickFind(nums, left, j, k);}else { //右范围进行递归return quickFind(nums, j + 1, right, k);}}}

整理者:长路 时间:2024.1.14-15
相关文章:
牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】
文章目录 前言牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】题目及类型思路思路1:大顶堆思路2:快排二分随机基准点 前言 博主所有博客文件目录索引:博客目录索引(持续更新) 牛客-寻找第K大、LeetCode215. 数组中的第K个最大元…...
MySQL的各种日志
目录 一、错误日志 二、二进制日志 1、介绍 2、作用 3、相关信息 4、日志格式 5、查看二进制文件 6、二进制日志文件删除 三、查询日志 四、慢日志 一、错误日志 记录MySQL在启动和停止时,以及服务器运行过程中发生的严重错误的相关信息,当数据库…...
rust跟我学六:虚拟机检测
图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎么检测是否在虚拟机里运行的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:…...
测试bug分析
项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) 问题描述 提示:这里描述项目中遇到的问题࿱…...
css-盒子等样式学习
盒子居中,继承外层盒子的宽高 兼容性(border-box)将边框收到盒子内部 初始化div 不用管box-setting content-box 还原 创建为一个类 ,让所有需要还原的类 进行继承 padding 用法表示margin上下左右边距 body 外边距&…...
数据库系统概论 第1章绪论 1.1数据库的四个基本概念
1.1.1 数据库的4个基本概念 - 数据(Data) - 数据库(Database, DB) - 数据库管理系统(DataBase Management System, DBMS) - 数据库系统(DataBase System, DMS) 1. 数据 - 数据(Data)是数据库中存储…...
使用Linux搭建svn
1.安装 Apache 和 Subversion 软件包 sudo yum install httpd subversion mod_dav_svn2.启动 Apache 服务 sudo systemctl start httpd3.设置 Apache 服务开机自启动 sudo systemctl enable httpd4.创建/svn 目录 sudo mkdir /svn5.设置 /svn 目录的权限: sudo…...
Kafka的安装、管理和配置
Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员,用Scala编写,运行在Java虚拟机上…...
某银行主机安全运营体系建设实践
随着商业银行业务的发展,主机规模持续增长,给安全团队运营工作带来极大挑战,传统的运营手段已经无法适应业务规模的快速发展,主要体现在主机资产数量多、类型复杂,安全团队难以对全量资产进行及时有效的梳理、管理&…...
虚拟化技术、Docker、K8s笔记总结
一、虚拟化技术 是一种将物理资源(如服务器、存储设备、网络设备等)抽象、转换和分割成多个逻辑资源的技术。通过虚拟化技术,用户可以在单个物理设备上运行多个相互独立的虚拟环境,从而提高资源的利用率、降低运维成本和提高系统…...
基于springboot+vue的在线拍卖系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…...
【征服redis3】一文征服redis的jedis客户端
使用数据库的时候,我们可以用JDBC来实现mysql数据库与java程序之间的通信,为了提高通信效率,我们有了数据库连接池比如druid等等。而我们想通过Java程序控制redis,同样可以借助一些工具来实现,这就是redis客户端&#…...
Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程
direct关键字发布订阅模式 基本用法 发布者 import json from rabbitmq import pika import rabbitmq# 建立连接 credentials rabbitmq.PlainCredentials(zhangdapeng,zhangdapeng520, ) # mq用户名和密码 connection_target rabbitmq.ConnectionParameters(host127.0.0.…...
如何应用数据图表了解家里的 Unifi 网络状况?
1. 前言 自从之前写了《【让 IT 更简单】使用 Ubiquiti 全家桶对朋友家进行网络改造》 《【Rethinking IT】如何结合 Unifi 和 MikroTik 设备打造家庭网络》两篇文章后,相信给各位正在用 Unifi 或者打算使用 Unifi 的朋友应该有所帮助。 那么,今天我就…...
新版K8s:v1.28拉取Harbor仓库镜像以及本地镜像(docker弃用改用containerd,纯纯踩坑)
目录 一、项目概述二、环境三、项目样式Harborkuboard运行样式 四、核心点Harbor安装config.toml文件修改(containerd)ctr、nerdctl相关命令kuboard工作负载 五、总结 一、项目概述 使用Kuboard作为k8s集群的管理平台,Harbor作为镜像仓库,拉取Harbor镜像…...
Unity URP切换品质和Feature开关的性能问题
现在对我的项目进行安卓端发布,需要切换品质和一些Feature开关。 我是这样做的。 划分品质 首先Renerer分为2个Android和PC,图中其他不用参考。 每个副本的URP Asset分为pc和android,例如图中的 hall和hall_android。 我们可以看到hall用的…...
jmeter解决返回unicode编辑
一般乱码有两种方法来解决: 1、修改配置文件jmeter.properties中默认编码格式ISO-8859-1(不支持中文),修改为utf-8 sampleresult.default.encoding utf-82、添加BeanShell PostProcessor加入 prev.setDataEncoding("utf-8")3、还有一种返回…...
C# 基础入门
第二章 C# 语法基础 2-1 C# 中的关键字 关键字,是一些被C#规定了用途的重要单词。 在Visual Studio的开发环境中,关键字被标识为蓝色,下图代码中,用红方框圈出的单词就是关键字。 关键字 class ,这个关键字的用途是…...
PHP 支付宝(单笔转账到银行账户接口)
alipay.fund.trans.tobank.transfer(单笔转账到银行账户接口) 小程序文档 - 支付宝文档中心 一、下载支付宝SDK,现有版本v1、v2、v3 https://github.com/alipay/alipay-sdk-php-all github 慢的话,DNS 直达即可 140.82.112.3 github.com 【host文…...
【Java万花筒】Java安全卫士:从密码学到Web应用攻击
Java安全锦囊:从Web应用攻击到加密算法,助你建立强固的开发堡垒 前言 在当今数字化时代,安全性至关重要,特别是对于Java开发者而言。本文将深入探讨Java安全与加密领域的关键库和技术,包括Bouncy Castle、Jasypt、Ke…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...
【AI News | 20250609】每日AI进展
AI Repos 1、OpenHands-Versa OpenHands-Versa 是一个通用型 AI 智能体,通过结合代码编辑与执行、网络搜索、多模态网络浏览和文件访问等通用工具,在软件工程、网络导航和工作流自动化等多个领域展现出卓越性能。它在 SWE-Bench Multimodal、GAIA 和 Th…...
