前端面试题:topK算法

    当面试官问你,在不考虑数字越界的情况下,有1亿条搜索数据,让你从中找到前100条频率高的数据你会怎么实现?

    当时,我的第一印象是把数据分组,分别求前多少条?但是没法保证每组的前100条或者多少条数据刚好是前几位的,这个被否定了。

    然后突然想到这不就是topK算法的变异,然后给面试官说了一下。找到一个对照值,然后把大于对照值的存储在left = [] 数组中,小于对照值的存储在right = [] 数组中,这样我们就得到了,两个数组,然后根据数组长度和K值比对进行递归,最终得到topK值。

    具体算法实现如下

function topK(arr, k) {
	if (arr.length < k || !arr) return arr;
	let mid = arr.splice(0, 1);
	let left = [],
		right = [];

	let len = arr.length;
	for (let i = 0; i < len; i++) {
		arr[i] > mid ? left.push(arr[i]) : right.push(arr[i]);
	}

	if (left.length === k) {
		return left;
	}
	if (left.length > k) {
		return topK(left, k);
	}
	if (left.length < k) {
		return left.concat(mid, topK(right, k - left.length - 1));
	}
}

测试数据

let karr = [6, 0, 1, 4, 9, 7, -3, 1, -4, -8, 4, -7, -3, 3, 2, -3, 9, 5, -4, 0];
let k = 8;
console.log(topK(karr, k));

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于Linux系统的目录结构介绍常用命令介绍

目录 一. Linux系统目录结构介绍 二. 一些常用命令的介绍 1、# 与 $的区别 2、ifconfig 3、su 4、cd 5、目录查看 6、查看文件内容 7、创建目录及文件 8、复制和移动 9、其他 10、tar 11、which 12、whereis 13、find 14、chmod 三. vim的基本使用 四. SSH密…

【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件

文章目录 前言地址介绍使用例子完结 前言 关于3D描边&#xff0c;其实之前有用shader弄过一个&#xff1a;【实现100个unity特效】shader实现3D物品闪光和描边效果 但是很遗憾的是他不支持URP项目&#xff0c;所以现在推荐这款插件&#xff0c;他能很好的支持URP&#xff0c;…

MyBatis中一级缓存是什么?SqlSession一级缓存失效的原因?如何理解一级缓存?

一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就 会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1) 不同的SqlSession对应不同的一级缓存 2) 同一…

蓝桥杯备赛 week 3 —— 高精度(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 高精度的概念 &#x1f4c1; 高精度加法和其模板 &#x1f4c1; 高精度减法和其模板 &#x1f4c1; 高精度乘法和其模板 &#x1f4c1; 高精度除法和其模板 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文…

电饼铛行业研究:中国市场规模整体上涨趋势明显

电饼铛是一个烹饪食物的工具&#xff0c;单面或者上下两面同时加热使中间的食物经过高温加热&#xff0c;达到烹煮食物的目的。电饼铛也叫烤饼机&#xff0c;可以灵活进行烤、烙、煎等烹饪方法&#xff0c;有家用小款型和店面使用大款两种。 大型的电饼铛具有自动上下火控温…

Python基础语法:代码规范、判断语句与循环语句

目录 一、代码规范 二、判断语句 三、循环语句 总结&#xff1a; Python是一种高级、动态类型的编程语言&#xff0c;其语法清晰、简洁&#xff0c;易于学习。本文将介绍Python基础语法中的代码规范、判断语句和循环语句。 一、代码规范 良好的代码规范可以提高代码的可读…

谈谈ArrayList和LinkedList的区别

目录 一、什么是数组 二、ArrayList 三、LinkedList 四、ArrayList和LinkedList的区别 一、什么是数组 在编程中&#xff0c;数组&#xff08;Array&#xff09;是一种用于存储多个相同类型数据元素的数据结构。它是一个有序的集合&#xff0c;其中每个元素都有一个唯一的…

Windows11操作系统百科

简介 Windows 11是由微软公司&#xff08;Microsoft&#xff09;开发的操作系统&#xff0c;应用于计算机和平板电脑等设备 [1]。于2021年6月24日发布 [3]&#xff0c;2021年10月5日发行 [29]。 Windows 11提供了许多创新功能&#xff0c;增加了新版开始菜单和输入逻辑等 [6]…

Java 字符串 04 练习-用户登录

自己写的代码&#xff1a; import java.util.Scanner; public class practice {static String rightUsername "zhangsan";static String rightPassword "123456";public static void main(String[] args) {//读题拆解法//1、定义两个变量&#xff0c;记…

机器学习--jupyter使用

机器学习–jupyter notebook的使用 Jupyter项目是一个非盈利的开源项目&#xff0c;源于2014年的ipython项目&#xff0c;因为它逐渐发展为支持跨所有编程语言的交互式数据科学和科学计算 Jupyter Notebook&#xff0c;原名IPython Notbook&#xff0c;是IPython的加强网页版…

NAS with RL(使用强化学习进行神经网络架构搜索,基于pytorch框架)

目录 一、 原代码 二、 代码学习(修改后并加上详细注释&#xff09; 1. 控制器 2. NASModel 3. 初始化及训练过程 3.1 主要参数的初始化 3.2 数据集的准备与加载 3.3 搜索空间 3.4 训练、参数更新 4. 对搜索空间、搜索策略、性能评估策略的认识 4.1 搜索空间&#xf…

PicGo+雨云ROS搭建自己的图床,可配合Typora使用

本文将手把手带你使用PicGo雨云对象存储ROS(Rain Object Storage)搭建自己专属的免费图床&#xff0c;并且可以配合Typora使用。 雨云对象存储服务介绍和使用教程&#xff1a;https://forum.rainyun.com/t/topic/5573 目前雨云对象存储是公测阶段&#xff0c;暂时是免费的。 …

杰卡德距离(Jaccard Distance)

杰卡德距离&#xff08;Jaccard Distance&#xff09;&#xff0c;是用于衡量两个集合差异性的一种指标&#xff0c;它是杰卡德相似系数的补集&#xff0c;可以用来区分集合&#xff08;如知识图谱&#xff09;。 杰卡德相似系数 杰卡德相似系数&#xff08;Jaccard similari…

01-echarts如何绘制三维折线图

echarts如何绘制三维折线图 一、相关依赖包1、下载依赖2、引入依赖 二、创建图表盒子1、创建盒子2、定义数据3、编写方法1、初始化盒子2、设置配置项3、修改数据格式4、设置颜色数组4、设置name数组5、设置线三维和点三维6、添加配置项7、设置图表自适应 4、调用方法 三、整体代…

【脑电信号处理与特征提取】P2-夏晓磊:脑电的神经起源与测量

夏晓磊&#xff1a;脑电的神经起源与测量 专业术语 electroencephalography(EEG) 脑电图 Excitatory Postsynaptic Potential(EPSP) 兴奋性突触后电位 Electrocorticography(ECoG) 皮层脑电图 什么是脑电/脑电图&#xff08;EEG&#xff09;&#xff1f; Electroencephalograp…

C++ 关于静态成员对象、函数学习整理:

类的静态成员为类创建的所有对象所共有的成员&#xff0c;不单独属于某一对象&#xff0c;而属于整个类&#xff0c;而静态成员分为静态成员变量、静态成员函数。 静态成员变量&#xff08;静态数据成员&#xff09;&#xff1a; 引入及解决问题的优势&#xff1a; 类创建了…

Java中SimpleDateFormat时YYYY与yyyy以及HH和hh的区别注意踩坑

场景 Java开发手册中为什么要求SimpleDateFormat时用y表示年&#xff0c;而不能用Y&#xff1a; Java开发手册中为什么要求SimpleDateFormat时用y表示年&#xff0c;而不能用Y_simpledateformat 怎么确定y就是年-CSDN博客 在使用SimpleDateFormat在获取当前日期时因使用了YY…

[极客大挑战 2019]Secret File1

上来就说看不到&#xff0c;先看看源码&#xff0c;发现./Archive_room.php 点secret直接跳到了end&#xff0c;抓包看看&#xff0c;找到了secr3t.php 过滤了很少的关键词&#xff0c;提示flag在flag.php&#xff0c;过去发现还是看不到 尝试用php伪协议读取flag.php的源码 …

creo草绘3个实例学习笔记

creo草绘3个实例 文章目录 creo草绘3个实例草绘01草绘02草绘03 草绘01 草绘02 草绘03

Web08--JavaScript高级

1、BOM对象 BOM&#xff1a;browser object model 浏览器对象模型 BOM对象包括window对象、screen对象、history对象、location对象、navigator对象。 1.1 window对象 所有的浏览器都支持window对象。它表示的浏览器窗口 window对象是js中的顶层对象&#xff0c;所有的j…