Java 第k个最小元素(K’th Smallest Element)
目录【朴素方法】使用排序——时间复杂度为 O(n log(n))空间复杂度为 O(1)【预期方法】使用最大堆 - 时间复杂度为 O(n * log(k))空间复杂度为 O(k)【替代方案 1】使用快速选择【替代方案 2】使用计数排序如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。给定一个整数数组arr[]和元素个数k求数组中第 k 小的元素。注意k 始终小于数组的大小。例如输入arr[] [10, 5, 4, 3, 48, 6, 2, 33, 53, 10], k 4输出5说明给定数组中第四小的元素是 5。输入arr[] [7, 10, 4, 3, 20, 15], k 3输出7说明给定数组中第三小的元素是 7。【朴素方法】使用排序——时间复杂度为 O(n log(n))空间复杂度为 O(1)其思路是对给定的数组进行排序并返回索引 k - 1 处的元素。import java.util.Arrays;class GFG {static int kthSmallest(int[] arr, int k) {// Sort the given arrayArrays.sort(arr);// Return kth element in the sorted arrayreturn arr[k - 1];}public static void main(String[] args) {int[] arr {10, 5, 4, 3, 48, 6, 2, 33, 53, 10};int k 4;System.out.println(kthSmallest(arr, k));}}输出5【预期方法】使用最大堆 - 时间复杂度为 O(n * log(k))空间复杂度为 O(k)其思路是在遍历数组的过程中维护一个大小为 k 的最大堆。该堆始终包含目前为止遇到的 k 个最小元素。如果堆的大小超过 k则移除最大的元素。最终堆中只保留 k 个最小元素。import java.util.PriorityQueue;import java.util.Collections;class GFG {static int kthSmallest(int[] arr, int k){// Create a max heapPriorityQueueInteger pq new PriorityQueue(Collections.reverseOrder());// Iterate through the array elementsfor (int val : arr){// Push the current element onto the max heappq.add(val);// If the size of the max heap exceeds k,// remove the largest elementif (pq.size() k)pq.poll();}// Return the kth smallest element (top of the max heap)return pq.peek();}public static void main(String[] args){int[] arr {10, 5, 4, 3, 48, 6, 2, 33, 53, 10};int k 4;System.out.println(kthSmallest(arr, k));}}输出5【替代方案 1】使用快速选择主要思路是利用快速选择QuickSelect函数找到第 k 大元素。具体做法是选择一个基准元素然后将数组分割成多个部分使得大于基准元素的元素位于左侧小于基准元素的元素位于右侧。如果基准元素最终位于索引 k-1 处则该元素即为第 k 大元素。否则我们递归地仅在包含第 k 大元素的左侧或右侧部分进行搜索。class GFG {static int partition(int[] arr, int left, int right) {// Choose the last element as pivotint pivot arr[right];int i left;// Traverse the array and move elements pivot to the leftfor(int j left; j right; j) {if(arr[j] pivot) {// Swap current element with element at iint temp arr[i];arr[i] arr[j];arr[j] temp;i;}}// Place the pivot in its correct positionint temp arr[i];arr[i] arr[right];arr[right] temp;return i;}static int quickSelect(int[] arr, int left, int right, int k) {if(left right) {// Partition around pivotint pivotIndex partition(arr, left, right);// Found k-th smallestif(pivotIndex k) return arr[pivotIndex];else if(pivotIndex k)return quickSelect(arr, left, pivotIndex - 1, k);else return quickSelect(arr, pivotIndex 1, right, k);}return -1;}static int kthSmallest(int[] arr, int k) {return quickSelect(arr, 0, arr.length-1, k-1);}public static void main(String[] args) {int[] arr {10,5,4,3,48,6,2,33,53,10};int k 4;System.out.println(kthSmallest(arr, k));}}输出5时间复杂度 最坏情况下为O(n² )但平均时间为 O(n log n)且性能优于基于优先级队列的算法。辅助空间 最坏情况下递归调用栈为 O(n)。平均而言O(log n)。【替代方案 2】使用计数排序主要思路是利用计数排序的频率计数来跟踪有多少元素小于或等于每个值然后直接从这些累积计数中识别出第 K 小的元素而无需对数组进行完全排序。注意这种方法在元素范围较小时特别有效因为我们声明的数组大小为最大元素个数。如果元素范围非常大计数排序方法可能并非最有效的选择。class GFG {static int kthSmallest(int[] arr, int k) {// First, find the maximum element in the arrayint maxElement arr[0];for (int i 1; i arr.length; i) {if (arr[i] maxElement) {maxElement arr[i];}}// Create an array to store the frequency of each elementint[] freq new int[maxElement 1];for (int i 0; i arr.length; i) {freq[arr[i]];}// Keep track of the cumulative frequency of elementsint count 0;for (int i 0; i maxElement; i) {if (freq[i] ! 0) {count freq[i];if (count k) {// If we have seen k or more elements,// return the current elementreturn i;}}}return -1;}public static void main(String[] args) {int[] arr {10, 5, 4, 3, 48, 6, 2, 33, 53, 10};int k 4;System.out.println(kthSmallest(arr, k));}}输出5时间复杂度 O(n maxElement)其中 maxElement 为数组中的最大元素。辅助空间 O(maxElement)。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。

相关新闻

哈森股份(603958)深度研究报告

哈森股份(603958)深度研究报告

一、投资要点1.1 核心结论哈森股份(603958.SH)是国内中高端女鞋领域的代表性企业之一,旗下拥有哈森、卡迪娜、卡文等自有品牌,并代理多个国际品牌。公司于2016年登陆上交所主板,是A股市场少数以中高端女鞋为主营的上市…

2026/8/26 17:27:00 阅读更多 →
Python 第k个最小元素(K’th Smallest Element)

Python 第k个最小元素(K’th Smallest Element)

目录 【朴素方法】使用排序——时间复杂度为 O(n log(n)),空间复杂度为 O(1) 【预期方法】使用最大堆 - 时间复杂度为 O(n * log(k)),空间复杂度为 O(k) 【替代方案 1】使用快速选择 【替代方案 2】使用计数排序 如果您喜欢此文章,请收藏…

2026/8/26 17:27:00 阅读更多 →
抖音星图平台:达人接单报价与抽成规则揭秘

抖音星图平台:达人接单报价与抽成规则揭秘

抖音星图平台:达人接单报价与抽成规则揭秘 在当今新媒体蓬勃发展的时代,抖音作为短视频领域的佼佼者,吸引了无数创作者和品牌方的目光。抖音星图平台作为连接达人与品牌方的重要桥梁,在达人接单合作中扮演着关键角色,其…

2026/8/26 17:25:59 阅读更多 →

最新新闻

2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链

2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链

2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链如果 2024 年是 RAG 的元年,2025 年是 Function Calling 的普及年,那 2026 年毫无疑问属于 MCP(Model Context Protocol,模型上下文协议&#…

2026/8/26 17:57:31 阅读更多 →
嵌入式CAN通信学习记录(万字解析):从STM32到Linux双机联调实战

嵌入式CAN通信学习记录(万字解析):从STM32到Linux双机联调实战

1. 引言 CAN(Controller Area Network)总线是嵌入式系统中广泛使用的一种高可靠性、多主机的串行通信协议,尤其在汽车电子、工业控制等领域应用广泛。本文旨在记录我学习嵌入式CAN通信的完整过程,涵盖从STM32开发板的环回/静默模…

2026/8/26 17:57:31 阅读更多 →
当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围

当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围

当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围 问小白用户想必都经历过同一个噩梦:让AI生成了一份逻辑清晰的对比表格,对话框内完美渲染,复制到Word或Excel后,却变成了一堆挤在单元格里的竖线符号…

2026/8/26 17:57:31 阅读更多 →
【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader

【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader

LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战 文章目录LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战一、LlamaIndex Reader 体系架构1.1 BaseRe…

2026/8/26 17:57:31 阅读更多 →
【2026年】实验室补风系统热平衡与节能设计

【2026年】实验室补风系统热平衡与节能设计

实验室排风量大、换气频繁,若不妥善处理补风,容易造成室内负压过大、空调负荷失衡,甚至影响安全。补风系统的热平衡设计,直接关系到实验室能否在高效排风的同时保持舒适安全、降低能耗。合理的补风方案是实验室通风设计中容易被忽…

2026/8/26 17:57:31 阅读更多 →
TVA与VLA双系统驱动的具身智能导航技术研究

TVA与VLA双系统驱动的具身智能导航技术研究

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积…

2026/8/26 17:56:29 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →