前端常用算法集合

使用前介绍

不借助临时变量,交换整数
加减乘除法
注意:如果是浮点数,对于加减乘除法需要注意浮点数的精度丢失问题。

对象法

数组法

数组去重
方法1(filter,推荐使用)

方法2(新数组法)

方法3(hash表法)

方法4

方法5(同时排序)

方法6(set + Array.from)

方法7(set + …扩展运算符)

实现数组的扁平化
将多维数组变成一位数组:如[1, [2, 3, [4, 5]]] => [1, 2, 3, 4, 5]
toString
局限性:使用 toString() 方法后,所有的元素类型都变成了字符串,再使用Number还原,假设原数组中存在类型不一的元素,则不能还原类型

flat

reduce
遍历每一项,如果值为数组,则递归遍历

递归

数组中含所有不定类型值的去重
普通法

map法

取数组中的最大最小值
排序法

apply方法

数组排序

参考:segmentfault【wscats】 十大经典排序算法

冒泡排序


比较相邻的元素,如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
实际排序时,由后往前完成排序动作。

选择排序


首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。

快速排序


从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

插入排序


将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

二路归并排序
将两个按值有序序列合并成一个按值有序序列

希尔排序

其他排序应用
数字、英文排序

中文姓名排序

数组乱序
遍历法
取随机位的值与当前的互换

sort法
随机数大于0.5的概率为1/2,然后选择顺序或倒序即可

Number数组中最大差值

打印九九乘法表

求数组交集和差级
ES7方法:

字符串翻转
转换成array

反向遍历

生成随机字符串

判断回文

统计出现最多的元素
最常见的思路是先使用object统计出元素和个数,再循环取最大的,但这样无疑会增加复杂度。所以需要在第一次遍历的时候就缓存好最大的元素。
统计字符串中最多的字母和出现的次数

统计数组中出现最多次数的元素和次数

阶乘
1x2x3x4x5…
递归

非递归

生成斐波那契数列
斐波那契数列(黄金分割数列): 0、1、1、2、3、5、8、13、21、34,考察递归
递归

非递归

二分查找
查找某个值是否在有序数组中,有则返回索引,数组必须是有序的
注意:
还有一种不传起始和终止下标参数,通过在函数体内使用slice取到新的arr,整体没有这种方法好。
递归

非递归

找出数组当中的质数
质数:也称素数,>1, 有无限个。除1和它自身之外不能被其他数整除,如2、3、5、7等,否则称为合数。

js求1! + 2! + 3! + 4! + 5!(阶乘)
思路:s
转换成 1! + (2 * 1!) + (3 * 2!) + (4 * 3!) + (5 * 4!)

两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
示例

解答

无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例
示例 1:

示例 2:

示例 3:

解答

整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例
示例 1:

示例 2:

示例 3:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [2^31, 2^31 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解答

走楼梯
10个台阶,每次只能上1个、2个或3个,一共有多少种走法?
拆分:
如果上10个台阶,可以分解以下情况:

上9个台阶,最后上1个台阶,假设这种前面9个的走法是 m 种。
上8个台阶,最后上2个台阶,假设这种前面8个的走法是 n 种。
上7个台阶,最后上3个台阶,假设这种前面7个的走法是 l 种。
所以上10个台阶的方法其实就是 m + n + l 种

同理:
1 中的上9个台阶也可以分为:

上8个台阶,最后上1个台阶,假设这种前面8个的走法是 m 种。
上7个台阶,最后上2个台阶,假设这种前面7个的走法是 n 种。
上6个台阶,最后上3个台阶,假设这种前面6个的走法是 l 种。
所以上9个台阶的方法其实就是 x + y + z 种

可以递归为:
f(n) = f(n - 1) + f(n - 2) + f(n - 3)

今日头条算法推导题
假设在今日头条里面,有很多工作人员检查新闻是不是属于虚假新闻,所有新闻真实率到达了98%,工作人员在检验一个真实的新闻把它检验为一个虚假的新闻的概率为2%,而一个虚假的新闻被检验为真实的新闻的概率为5%. 那么,一个被检验为真实的新闻确实是真实的新闻的概率是多大
A.0.9991
B.0.9989
C.0.9855
D.0.96
答案:B
分析条件得到:
真的新闻:98%
假的新闻:2%
真的->假的:2%
假的->真的:5%
分析要求:被检验为真实的新闻确实是真实的新闻
首先要明确被检验为真实的新闻包括了(本来是真的和本来是假的)所以分子为(真->真),分母为(真->真 + 假->真)
结果为:(真->真)/(真->真 + 假->真) = (98%(1-2%)) / (98%(1-2%) + 2%*5%) = 0.9604/0.9614 = 0.9989…
求排列组合
[a] 得到 [a]
[a, b] 得到 [a, b, ab]
[a, b, c] 得到 [a, b, ab, c, ac, bc, abc]
[a, b, c, d] 得到 [a, b, ab, c, ac, bc, abc, d, ad, bd, abd, cd, acd, bcd, abcd]
分析:

[a]的结果为[a],数量为1
从[a]到[a, b],结果其实是[a]的结果加上b元素,然后再将[a]结果中的每一个元素和b进行组合,得到[a, b, ab],总数为 1+1+1=3
从[a, b]到[a, b, c],结果其实是[a, b]的结果加上c元素,然后将[a, b]结果中的每一个元素和c进行组合,得到[a, b, ab, c, ac, bc, abc],总数为3+1+3 = 7

所以,n个元素的排列组合为:fn = f(n-1) + 1 + f(n-1)
要实现多个元素的排列组合,可以从1个元素开始算,随着遍历往后移动,将前一个的结算结果与新元素拼接,然后进行组合,完成之后再覆盖临时变量
实现:

如果变换一下需求,如果想:
[a] 得到 [a]
[a, b] 得到 [a, ab]
[a, b, c] 得到 [a, ab, abc]
[a, b, c, d] 得到 [a, ab, abc, abcd]
最简单结合slice方法如下:

如果不可以使用slice方法:

用两个栈实现一个队列

实现不规范版本号的排序

输入一组数,输出最大组合数

二叉树排列(从上到下,从左到右)

二叉树的蛇形排列(从上到下,奇数行从左到右,偶数行从右到左)

二维有序数组的查找

for循环 + includes、indexOf

some + includes、indexOf

线性查找

防疲劳设置
弹窗每 10s 内只能出现 3次,假定弹窗本身只能看,不能操作

链式调用实现执行、等待执行、先执行操作

链式调用的原理:一个对象里面的多个方法,每个方法内部return this,这样后面的方法在调用的时候就可以继续在this环境下执行。

本题实现

原文链接:https://juejin.cn/post/7406643531699142667

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

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

相关文章

保护模式基本概念

CPU 架构 RISC(Reduced Instruction Set Computer) 中文即"精简指令集计算机”。RISC构架的指令格式和长度通常是固定的(如ARM是32位的指令)、且指令和寻址方式少而简单、大多数指令在一个周期内就可以执行完毕 CISC&…

62.基于SpringBoot + Vue实现的前后端分离-驾校预约学习系统(项目+论文)

项目介绍 伴随着信息技术与互联网技术的不断发展,人们进到了一个新的信息化时代,传统管理技术性没法高效率、容易地管理信息内容。为了实现时代的发展必须,提升管理高效率,各种各样管理管理体系应时而生,各个领域陆续进…

【零基础保姆级教程】制作自己的数据集(二)——Labelme的安装与使用及常见的报错解决方法

前段时间安装了Labelimg,网上有些博客写着Labelme能进行语义分割的标注,但UI窗口就那么大找不着选项,只能打矩形框,为了能够标注自己的分割数据集,遂写下该教程以供参考。 采用Labelimg进行目标检测标注的教程如下。 …

详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)

1、什么是I/O 在计算机操作系统中,所谓的I/O就是输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为…

无人设备遥控器之定向天线篇

一、定义与功能 定向天线,顾名思义,是通过改变天线的辐射方向,实现信号发射、接收和增强的天线。它可以让信号以更高的功率、更远的距离传输到指定区域,同时也能够降低与周围天线之间的干扰。在无人设备遥控器中,定向天…

老旧小区用电安全保护装置#限流式防火保护器参数介绍#

摘要 随着居民住宅区用电负荷的增加,用电安全问题日益突出,火灾隐患频繁发生。防火限流式保护器作为一种新型电气安全设备,能够有效预防因电气故障引发的火灾事故。本文介绍了防火限流式保护器的工作原理、技术特点及其在居民住宅区用电系统…

dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端

前情提要 交互场景:dify的ChatFlow上传文件(本示例是单张图片),通过HTTP请求至SpringBoot后端dify版本:0.13.2python版本:3.12.7 1. 自定义上传变量 在【开始】节点自定义变量单文件上传变量file 2. 下接HTTP请求节点 BODY要…

【幼儿园识物】比大小启蒙资料PDF

下载链接::huanxigou-uihttp://yiwub.natapp1.cc/zyweb/#/source/viewPdf?id9

帧缓存的分配

帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存,使用的是一个叫 ION 的内核模块,App 使用 ioctl 系统调用后,会在内核内存中分配一块符合要求的内存,用户态会拿到一个 fd(有的地方也称之为 handle&…

SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、黑翅鸢算法BKA 黑翅鸢算法(Black-winged kite algorithm,BKA)由Wang Jun等人于2024年提出,该算法受黑翅鸢的迁徙和掠食行为启发而得。BKA集成了柯西突变策略和领导者策略,增强了算法的全局搜索能力,提…

【Python】基础语法介绍

目录 一、标识符和关键字 二、注释 三、缩进 四、输入和输出 五、字符串操作 六、基本数据类型 七、复合数据类型 7.1 列表 7.2 元组 7.3 字典 7.4 集合 八、数据类型转换 九、运算符 8.1 算术运算符 8.2 比较运算符 8.3 赋值运算符 8.4 位运算符 8.5 逻辑运…

stm32定时器输出比较----驱动步进电机

定时器输出比较理论 OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出…

【NLP 17、NLP的基础——分词】

我始终相信,世间所有的安排都有它的道理;失之东隅,收之桑榆 —— 24.12.20 一、中文分词的介绍 1.为什么讲分词? ① 分词是一个被长期研究的任务,通过了解分词算法的发展,可以看到NLP的研究历程 ② 分词…

Rust 在前端基建中的使用

摘要 随着前端技术的不断发展,前端基础设施(前端基建)的建设已成为提升开发效率、保障产品质量的关键环节。然而,在应对复杂业务场景与高性能需求时,传统的前端技术栈逐渐暴露出诸多不足。近年来,Rust语言…

谷歌浏览器的网络连接问题解决方案

在数字化时代,网络浏览器已成为日常工作和生活中不可或缺的工具。谷歌浏览器以其快速、稳定和丰富的功能深受用户喜爱。然而,就像其他软件一样,谷歌浏览器也可能遇到网络连接问题,这可能由多种因素引起。本文将为您提供一系列解决…

【Unity3D】Particle粒子特效或3D物体显示在UGUI上的方案

目录 一、RawImage Camera RenderTexture方式 (1)扩展知识:实现射线检测RawImage内的3D物体 (2)扩展知识:实现粒子特效显示RawImage上 二、UI摄像机 Canvas(Screen Space - Camera模式)方式 &#…

14-zookeeper环境搭建

0、环境 java:1.8zookeeper:3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压,放到你想放的目录里。先看一下zookeeper的目录结构,如下图: 进入conf目录,复制zoo_sample.cfg&#xff0…

精准提升:从94.5%到99.4%——目标检测调优全纪录

🚀 目标检测模型调优过程记录 在进行目标检测模型的训练过程中,我们面对了许多挑战与迭代。从初始模型的训练结果到最终的调优优化,每一步的实验和调整都有其独特的思路和收获。本文记录了我在优化目标检测模型的过程中进行的几次尝试&#…

贪心算法(三)

目录 一、k次取反后最大化的数组和 二、优势洗牌 三、最长回文串 四、增减字符串匹配 一、k次取反后最大化的数组和 k次取反后最大化的数组和 贪心策略&#xff1a; 解题代码&#xff1a; class Solution { public:int largestSumAfterKNegations(vector<int>&am…

基于Springboot的在线问卷调查系统【附源码】

基于Springboot的在线问卷调查系统 效果如下&#xff1a; 系统主页面 问卷列表页面 个人中心页面 系统登陆页面 管理员主页面 问卷管理页面 研究背景 随着互联网技术的飞速发展&#xff0c;传统的问卷调查方式因其时间和地点的限制&#xff0c;难以高效地收集到足够的数据。…