JS算法题:找到数组中第 k 大的元素

问题描述:

给定一个未排序的整数数组,找到其中第 k 大的元素。注意,你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

举个例子:

如果给定数组是 [3,2,1,5,6,4],k 是 2,那么第 2 大的元素是 5。

解决方案

快速选择(Quickselect)算法

function findKthLargest(nums, k) {// 定义一个辅助函数用于快速选择function quickSelect(arr, left, right, k) {if (left === right) return arr[left];// 使用随机选取一个 pivot 元素let pivotIndex = Math.floor(Math.random() * (right - left + 1)) + left;pivotIndex = partition(arr, left, right, pivotIndex);if (k === pivotIndex + 1) {return arr[pivotIndex];} else if (k < pivotIndex + 1) {return quickSelect(arr, left, pivotIndex - 1, k);} else {return quickSelect(arr, pivotIndex + 1, right, k);}}// 辅助函数:根据 pivot 将数组划分为两部分function partition(arr, left, right, pivotIndex) {let pivotValue = arr[pivotIndex];swap(arr, pivotIndex, right);let storeIndex = left;for (let i = left; i < right; i++) {if (arr[i] > pivotValue) {swap(arr, i, storeIndex);storeIndex++;}}swap(arr, storeIndex, right);return storeIndex;}// 辅助函数:交换数组中的两个元素function swap(arr, i, j) {let temp = arr[i];arr[i] = arr[j];arr[j] = temp;}// 调用快速选择算法找到第 k 大的元素return quickSelect(nums, 0, nums.length - 1, k);
}

测试

// 测试
let nums = [3,2,1,5,6,4];
let k = 2;
console.log(findKthLargest(nums, k)); // 输出: 5

找到数组中第 k 大的元素

算法复杂度

这个算法的平均时间复杂度为 O(n),其中 n 是数组的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623659.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解神经网络学习率(定义、影响因素、常见调参方法、关键代码实现)

目录 什么是学习率&#xff1f; 有哪些影响因素&#xff1f; 常用调整方法&#xff1f; 博主介绍&#xff1a;✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神&#xff0c;答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平…

PyQt介绍——弹框介绍和使用

PyQt介绍——弹框介绍和使用 一、QMessageBox QMessageBox是一种通用的弹出式对话框&#xff0c;用于显示消息&#xff0c;允许用户通过单击不同的标准按钮对消息进行反馈 QMessageBox类提供了许多常用的弹出式对话框&#xff0c;如提示、警告、错误、询问、关于等对话框。这…

一文详解MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM及其关系

经常遇到很多系统&#xff0c;比如&#xff1a;MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM&#xff0c;这些都是什么系统&#xff1f;有什么功能和作用&#xff1f;它们之间的关系是怎样的&#xff1f; 今天就一文详细分享给大家。 10大系统之间的关系 ERP 和其他…

说说你对集合的理解?常见的操作有哪些?

一、是什么 集合&#xff08;Set&#xff09;&#xff0c;指具有某种特定性质的事物的总体&#xff0c;里面的每一项内容称作元素 在数学中&#xff0c;我们经常会遇到集合的概念&#xff1a; 有限集合&#xff1a;例如一个班集所有的同学构成的集合无限集合&#xff1a;例如…

Mybatis-plus中的分页操作

Mybatis-plus中的分页操作 1.导入Mybatis-plus依赖2.创建mybatis配置类3.参数 1.导入Mybatis-plus依赖 因为是一个springboot项目&#xff0c;其中的pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns&q…

【电力工程】电力大数据和云架构智能AI服务平台研发建设项目可行性研究报告范例

1、项目概况 本项目拟进行基于电力大数据和云架构的智能 AI 服务平台的研究,具体包括电力多元大数据中心、技术中台、数据中台和智能 AI 中台,基于电力大数据云平台基础构建 BI 可视化开发平台和智能 AI 服务平台。 该项目的实施旨在引领公司在大数据领域发展的新趋势,从功…

【C++初阶】C++简单入门(长期维护)

本篇博客是对C的一些简单知识分享&#xff0c;有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念&#xff1a;2.C发展历程3.C如何学&#xff1f; 二、C入门1.C关键字(C98标准)2.命名空间3.C输入&输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参…

3D模型处理的并行化

今天我们将讨论如何使用 Python 多进程来处理大量3D数据。 我将讲述一些可能在手册中找到的一般信息&#xff0c;并分享我发现的一些小技巧&#xff0c;例如将 tqdm 与多处理 imap 结合使用以及并行处理存档。 那么我们为什么要诉诸并行计算呢&#xff1f; 使用数据有时会出现…

javaWeb项目-游泳馆管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、SSM框架 开发信息…

关于Qt主窗口的菜单部件

前言 在介绍主窗口的两大部件之前&#xff0c;我们要先知道关于主窗口的一些知识。 主窗口 一个主窗口可以没有菜单条、工具条、状态条&#xff0c;但必须设置中心部件。在 Q 生成的 C头文件 ui_mainwindow.h 代码中,我们可以看到以下代码: centralWidget new Qwidget(MainWi…

无效的标记: --release

maven编译项目时候出现&#xff1a;无效的标记: --release 项目背景 介绍一下项目背景&#xff1a; java17 SpringBoot&#xff1a;3.2.0 SpringCloud&#xff1a; 2023.0.0 之前一直用java8开发项目 问题原因 maven所使用的jdk版本和idea所使用的jdk版本不一致导致的。…

GitHub repository - commits - branches - releases - contributors

GitHub repository - commits - branches - releases - contributors 1. commits2. branches3. releases4. contributorsReferences 1. commits 在这里可以查看当前分支的提交历史。左侧的数字表示提交数。 2. branches 可以查看仓库的分支列表。左侧的数字表示当前拥有的分…