JavaScript 未排序数组中第 k 个最小/最大元素 预期线性时间

发布时间:2026/9/3 15:07:06

JavaScript 未排序数组中第 k 个最小/最大元素 预期线性时间
如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。未排序数组中第 k 个最小/最大元素 预期线性时间(K’th Smallest/Largest Element in Unsorted Array | Expected Linear Time)给定一个由不同整数组成的数组和一个整数 k其中 k 小于数组的大小任务是找到数组中第k小的元素。例如输入arr [7, 10, 4, 3, 20, 15] k 3输出7解释排序后的数组为 [3, 4, 7, 10, 15, 20]因此第三小的元素是 7。输入arr [7, 10, 4, 3, 20, 15] k 4输出10解释排序后的数组为 [3, 4, 7, 10, 15, 20]因此第 4 小的元素是 10。请注意解决“无序数组中最小/最大元素”问题有多种方法。本文讨论的方案在实践中效果最佳。无序数组中最小/最大元素C 第k个最小元素 C 第k个最小元素(K’th Smallest Element)-CSDN博客C# 第k个最小元素 C# 第k个最小元素(K’th Smallest Element)-CSDN博客Java 第k个最小元素 Java 第k个最小元素(K’th Smallest Element)-CSDN博客Python 第k个最小元素 https://blog.csdn.net/hefeng_aspnet/article/details/163051049JavaScript 第k个最小元素 https://blog.csdn.net/hefeng_aspnet/article/details/163051180其思路是使用随机枢轴选择来划分数组通过专注于第 k 个元素所在的子数组来缩小搜索空间。循序渐进的方法随机选择枢轴元素随机选择一个元素作为枢轴元素。这有助于避免某些情况下的最坏情况例如数组已排序时。分区重新排列数组使所有小于枢轴元素的元素位于左侧所有大于枢轴元素的元素位于右侧。递归搜索枢轴元素确定位置后如果其索引与第 n 次比较相等则它是第 K 个大元素。否则根据与第 n 次-k 比较的结果递归地在相应的分区左侧或右侧中搜索-k。// JavaScript program to find K’th Smallest/// Largest Element in Unsorted Array// Partition function: Rearranges elements// around a pivot (last element)function partition(arr, l, r) {let x arr[r];let i l;// Iterate through the subarrayfor (let j l; j r - 1; j) {// Move elements pivot to the left partitionif (arr[j] x) {[arr[i], arr[j]] [arr[j], arr[i]];i;}}// Place the pivot in its correct position[arr[i], arr[r]] [arr[r], arr[i]];return i;}// Randomizes the pivot to avoid worst-case performancefunction randomPartition(arr, l, r) {let n r - l 1;let pivot Math.floor(Math.random() * n);[arr[l pivot], arr[r]] [arr[r], arr[l pivot]];return partition(arr, l, r);}// function to find the kth smallest element using QuickSelectfunction quickSelect(arr, l, r, k) {// Check if k is within the valid range of the current subarrayif (k 0 k r - l 1) {// Partition the array and get the pivots final positionlet pos randomPartition(arr, l, r);// If pivot is the kth element, return itif (pos - l k - 1)return arr[pos];// If pivots position is larger than k, search left subarrayif (pos - l k - 1)return quickSelect(arr, l, pos - 1, k);// Otherwise, search right subarray and adjust k// (k is reduced by the size of the left partition)return quickSelect(arr, pos 1, r, k - (pos - l 1));}// Return Infinity for invalid k (error handling)return Infinity;}function kthSmallest(arr, k) {let n arr.length;return quickSelect(arr, 0, n - 1, k);}let arr [12, 3, 5, 7, 4, 19, 26];let k 3;console.log(kthSmallest(arr, k));输出5时间复杂度O(n)。上述解决方案的最坏情况时间复杂度仍然是 O(n² )。在最坏情况下随机函数可能总是选择一个角点元素。然而平均情况时间复杂度为 O(n²) O(n)。分析中的假设是随机数生成器生成输入范围内任意数字的概率均等。辅助空间O(1)因为使用了常量变量。即使最坏情况下的时间复杂度是二次方的但这种解决方案在实践中效果最佳。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。

相关新闻

通信原理实验指南:从MATLAB仿真到工程实践的核心模块解析

通信原理实验指南:从MATLAB仿真到工程实践的核心模块解析

2026/9/3 15:07:06

简介:本资源是华中科技大学电子信息类专业《通信原理》课程配套学习资料包,面向高校通信、电子、信息类本科生及考研复习者,聚焦课程核心实验与课后实践环节的落地支撑。压缩包内含完整实验报告、配套MATLAB/Python源码、详细操作说明书及典型…

Replit免费模式解析:云开发平台的成本控制与配额设计

Replit免费模式解析:云开发平台的成本控制与配额设计

2026/9/3 15:07:06

打开浏览器就能写 Python、随手部署一个小应用,还能让别人通过链接直接访问你的项目——这是很多人第一次接触 Replit 时的直观感受。而真正让它“火”起来的一个重要原因,是它提供了一个对个人开发者足够友好的免费模式。很多新手的第一行代码、第一个 …

Logit Tilting驱动的自动化LLM审计:BLOOM-WILT方法解析

Logit Tilting驱动的自动化LLM审计:BLOOM-WILT方法解析

2026/9/3 15:07:06

最近在梳理大模型安全审计相关方案时,我注意到一个很有启发性的研究方向:BLOOM-WILT。它把“日志倾斜(Logit Tilting)”用在了自动化 LLM 审计中,目的是通过可控的生成测干预,把模型在常规提问下不容易暴露…

每日一讲 小游戏 石头剪刀布

每日一讲 小游戏 石头剪刀布

2026/9/3 15:37:08

题目 : 计算机随机产生一个数字0、1和2分别表示剪刀、石头和布,用户输入数字0、1或2,输出用户赢、计算机赢或平局 【代码】 import random choices ["剪刀(0)","石头(1)","布(2)"] computer random.randint(0,2) p…

2027论文AIGC检测报告怎么看:知网、维普、格子达风险区间最全解读

2027论文AIGC检测报告怎么看:知网、维普、格子达风险区间最全解读

2026/9/3 15:27:07

2027论文AIGC检测报告怎么看:知网、维普、格子达风险区间最全解读 在 2027 年各大高校陆续下发学位论文抽检通知之际,许多应届毕业生在拿到自查报告时都会感到困惑:2027论文AIGC检测报告怎么看:知网、维普、格子达风险区间最全解…

AI视频生成项目部署与测试:多角色一致性长视频实战指南

AI视频生成项目部署与测试:多角色一致性长视频实战指南

2026/9/3 15:27:07

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2027最新论文AI检测工具测评:BunnyCheck、助研君和BunnyScholar结果对比

2027最新论文AI检测工具测评:BunnyCheck、助研君和BunnyScholar结果对比

2026/9/3 15:27:07

2027最新论文AI检测工具测评:BunnyCheck、助研君和BunnyScholar结果对比 随着各大高校对学位论文 AIGC 审查标准的日益规范化,2027 届硕博研究生在论文送审前普遍面临严峻的自查需求:2027最新论文AI检测工具测评:BunnyCheck、助研…

RHCSA EX200备考:Part 2核心考点与实操指南

RHCSA EX200备考:Part 2核心考点与实操指南

2026/9/3 15:27:07

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TimesFM-3:零样本多变量时间序列基础模型解析与实战

TimesFM-3:零样本多变量时间序列基础模型解析与实战

2026/9/3 15:27:07

如果你做过一段时间的时间序列预测,大概率经历过这样的脚本地狱:换一批业务数据,就要重新跑一轮 LSTM/GRU 的网格搜索;隐藏层维度、窗口大小、学习率、正则化系数,每一项都像是玄学调参。更让人沮丧的是,上…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/3 6:39:45

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/3 5:20:28

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…