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

news2024/11/28 10:59:06

问题描述:

给定一个未排序的整数数组,找到其中第 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.coloradmin.cn/o/1599346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MedSAM环境搭建推理测试

引子 之前分享过一篇SAM&#xff08;感兴趣的&#xff0c;请移步Segment Anything&#xff08;SAM&#xff09;环境安装&代码调试_segment anything环境-CSDN博客&#xff09;环境搭建&推理测试&#xff0c;虽然话说Segment Anything&#xff0c;但是原始模型对于一些…

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

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

自动化图像标注是否可靠?人人可尝试的方案

一、背景 随着大模型的崛起&#xff0c;多模态模型如雨后春笋一样快速发展。我们可以借助多模态大模型理解物理世界中的物体&#xff0c;在上篇文章大模型时代&#xff0c;图像描述生成&#xff08;image caption&#xff09;怎么走&#xff1f;中提到基于大模型的图像描述生成…

ADB的基本语法及常用命令

学习网址 ADB命令的基本语法如下&#xff1a; adb [-d|-e|-s <serialNumber>] <command> 如果有多个设备/模拟器连接&#xff0c;则需要为命令指定目标设备。 参数及含义如下&#xff1a; 常用命令如下&#xff1a; 1. 启动ADB服务 adb start-server 2. 停止…

上网方法介绍

注册 https://www.cordcloud.biz/user 注册后先充值&#xff0c;充值后还要购买套餐&#xff0c; 充值之后&#xff0c;就可以看到流量了&#xff0c;然后复制订阅地址&#xff0c;到客户端去自动下载 URL拷贝到这个地方&#xff0c;然后点击下载

Vue.js前端开发零基础教学(六)

学习目标 了解什么是路由&#xff0c;能够说出前端后端路由的原理 掌握多种路由的使用方法&#xff0c;能够实现路由的不同功能 掌握Vue Router的安装及基本使用方法 5.1 初始路由 提到路由&#xff08;Route),一般我们会联想到网络中常见的路由器&#xff08;Router),…

清明三天,用Python赚了4万?

每年4月&#xff0c;是Python圈子里接私活的旺季&#xff0c;特别是在节假日这种数据暴增的时间段&#xff0c;爬虫采集、逆向破解类的私活订单会集中爆发&#xff0c;量大价高。几乎所有的圈内人都在趁着旺季接私活。 正好&#xff0c;我昨天就做了一单爬虫逆向私活&#xff…

Python统计分析库之statsmodels使用详解

概要 Python statsmodels是一个强大的统计分析库,提供了丰富的统计模型和数据处理功能,可用于数据分析、预测建模等多个领域。本文将介绍statsmodels库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装statsmodels库非常简单,可以使用pip命令进行安装:…

SGI_STL空间配置器源码剖析(六)deallocate函数

deallocate函数是内存释放函数。源码及注释如下&#xff1a; /* __p may not be 0 */static void deallocate(void* __p, size_t __n) // __p指向要回收的内存起始地址&#xff0c;__n表示其大小{if (__n > (size_t) _MAX_BYTES)// 大于128字节&#xff0c;普通方式开辟和回…

男生穿什么裤子最百搭?适合男生穿的裤子品牌测评分享

每个伙伴们想必经常都会选择一些裤子&#xff0c;但现在市面上的裤子品牌也实在太多了&#xff0c;好不容易选到了几件好看的裤子&#xff0c;结果质量却很不好。主要就是因为现在有太多商家为了利润而使用一些舒适性、质量差的面料&#xff0c;那么今天就给大家分享一些质量上…

RAG 如何消除大模型幻觉

什么是大模型幻觉 假设我们有一个基于大型生成模型&#xff08;如GPT-3&#xff09;的问答系统&#xff0c;该系统用于回答药企内部知识库中的问题。我们向其提出一个问题&#xff1a;“阿司匹林的主要药理作用是什么&#xff1f;” 正确的答案应该是&#xff1a;“阿司匹林主…

无人棋牌室软硬件方案

先决思考 软件这一套确实是做一套下来&#xff0c;可以无限复制卖出&#xff0c;这个雀氏是一本万利的买卖。 现在肯定是有成套的方案&#xff0c;值不值得重做&#xff1f;为什么要重做&#xff1f; 你想达到什么效果&#xff1f;还是需要细聊的。 做这个东西难度不高&…

✌粤嵌—2024/3/18—搜索插入位置

代码实现&#xff1a; 二分法&#xff1a; 方法一&#xff1a;非递归&#xff0c;左闭右闭 int searchInsert(int *nums, int numsSize, int target) {int l 0, r numsSize - 1; // 左闭右闭int mid;while (l < r) {mid (l r) / 2;if (nums[mid] target) {return mid;}…

plc数据采集网关

在信息化与工业化深度融合的今天&#xff0c;数据采集成为了推动制造业智能化转型的重要基石。其中&#xff0c;PLC数据采集网关作为连接PLC设备与上层管理系统的桥梁&#xff0c;扮演着至关重要的角色。 一、PLC数据采集网关&#xff1a;定义与重要性 PLC数据采集网关是一种…

3D视觉引导麻袋拆垛破包 | 某大型化工厂

客户需求 此项目为大型化工厂&#xff0c;客户现场每日有大量麻袋拆垛破包需求&#xff0c;麻袋软包由于自身易变形、码放垛型不规则、运输后松散等情况&#xff0c;无法依靠机器人示教位置完成拆垛。客户遂引入3D视觉进行自动化改造。 工作流程&#xff1a; 3D视觉对紧密贴合…

论文略读:Window Attention is Bugged: How not to Interpolate Position Embeddings

iclr 2024 reviewer 打分 6666 窗口注意力、位置嵌入以及高分辨率微调是现代Transformer X CV 时代的核心概念。论文发现&#xff0c;将这些几乎无处不在的组件简单地结合在一起&#xff0c;可能会对性能产生不利影响问题很简单&#xff1a;在使用窗口注意力时对位置嵌入进行插…

基于ARX结构(模加运算循环移位异或运算)的密码杂凑算法Lemon512

基于ARX结构(模加运算&循环移位&异或运算)的密码杂凑算法Lemon512 黄金龙 QQ1435271638 密码杂凑算法 密码杂凑算法也称作“散列算法”或“哈希算法”,现在的密码行业标准统称其为密码杂凑算法,简称“杂凑算法”或“杂凑函数”。密码杂凑算法对任意长度的消息进行…

鱼哥推荐书籍第18期:《推荐系统》算法 案例与大模型

鱼哥推荐书籍第18期&#xff1a;《推荐系统》算法 案例与大模型 什么是推荐系统&#xff1f;推荐系统解决了哪些问题&#xff1f;推荐系统的应用领域常用的推荐算法&#xff1a;基于内容的推荐算法协同过滤算法&#xff1a; 如何系统学习推荐系统&#xff1a;第一部分&#xff…

【Java探索之旅】数组使用 初探JVM内存布局

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局&#x1f324;️全篇总结 …

聚道云软件连接器助力企业实现滴滴出差报销自动化

一、客户介绍 某机械有限公司是一家在机械设备制造领域拥有深厚底蕴和卓越实力的企业。自公司成立以来&#xff0c;该公司始终秉承创新、务实、高效的发展理念&#xff0c;专注于机械设备的研发、生产和销售。经过多年的发展&#xff0c;公司已成为国内机械行业的佼佼者&#…