刷算法常见注意点

num

正无穷:Infinity

金额格式化:利用字符串提供的toLocaleString()方法处理。有时候不生效,比如app

数字容错:if(!Number.isFinite(num)){ //不是数字}

js数组

头部添加unshift 、尾部增加push、首部删除shift、尾部删除pop

slice()通过索引位置获取新的数组,该方法不会修改原数组,只是返回一个新的子数组。(浅拷贝) 简单数组隔离得这么处理

s.slice(-b),返回尾部b个,slice(0,-b),返回截取b之前的

reduce:数组为0报错,arr.reduce((pre,cur)=>pre+cur,0)

字符串

substr(start,len)

substring(start,end)

小写:toLowerCase;大写:toUpperCase();

endsWith是否以某个字符串结尾

substring 它是将在string末尾搜索的字符集

length 选修的。它是将被搜索的字符串的长度。如果未提供此参数,则endsWith() 方法将搜索字符串的全长。

String.charCodeAt(index) 返回指定位置的字符的编码

String.charAt(index) 返回字符串中指定位置的字符

String.fromCharCode(n1, n2, …, nX) 接受一个指定的 Unicode 值,然后返回一个字符串

str.padStart(targetLength [, padString])在字符串的开头进行字符补全

padEnd(len,str)用于尾部补全

let str = “qwertyuasdfghjzxcvbn”;
str = […str].sort((a,b)=>{
return a.localeCompare(b,“zh-CN”)
}).join(“”)

parseInt 将字符串自动转成整数,开头结尾允许空格,第一个数字会被返回,第一个字符不能转成数字,返回NaN

parseFloat 将字符串自动转成数字,开头结尾允许空格,第一个数字会被返回,第一个字符不能转成数字,返回NaN

Number 不能整体转成,返回NaN

堆和队列

堆栈:后进先出,队列:先进先出

堆栈:插入删除都发生在top端,队列:插入发生在rear端,删除发生在front端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9M84Di7-1692627240123)(C:\Users\syhgly\AppData\Roaming\Typora\typora-user-images\1676441999210.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxfbBtV6-1692627240124)(C:\Users\syhgly\AppData\Roaming\Typora\typora-user-images\1676442057388.png)]

栈和堆的关系:基础变量的值是存储在栈中,而引用变量存储在栈中的是指向堆中的数组或者对象的地址,这就是为何修改引用类型总会影响到其他指向这个地址的引用变量。(线性结构,后进先出)

call()、apply()、bind()

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象

第二个参数,call-a,b bind-是函数、bind(db,[])(),apply-数组

Math.min.call(null,…array)

公倍数、公因数

比如求 x,y的最大公约数和最小公倍数

记住这个公式: xy=最小公倍数最大公约数

求最大公因数公式

https://blog.csdn.net/wyh_ty/article/details/105949789

质子问题
 let num =180let res = '', k = Math.sqrt(num)for(let i = 2 ; i <= k ; i++) {while(num % i === 0) {res += i + ' 'num = num / i}}// 如果num最后不是1,则说明此时num也是一个质数,需要添加到最后if(num !== 1) {res += num}console.log(res)
随机数

Math.floor(Math.random()*num)(随机产生0-num之间的整数不包括num)

动态规划

核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法

适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )

// 如果求组合数就是外层for循环遍历物品,内层for遍历背包。-- 购物单
// 如果求排列数就是外层for遍历背包,内层for循环遍历物品。

1.数组dp以及下标含义

2.逆推公式

3.dp数组如何初始话

4遍历顺序

5.循环打印数组

「归并排序」是分治思想的典型应用(逆序函数)

它包含这样三个步骤:

分解: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZtyRM1l-1692627240125)(C:\Users\syhgly\AppData\Roaming\Typora\typora-user-images\1678965608618.png)]
解决: 使用归并排序递归地排序两个子序列
合并: 把两个已经排好序的子序列 [l, m][l,m] 和 [m + 1, r][m+1,r] 合并起来
在待排序序列长度为 11 的时候,递归开始「回升」,因为我们默认长度为 11 的序列是排好序的。

运算符

1<<n 2的n次方 a**b a的b次方

常见正则

/s空白字符

+1或多个

算法概念

DFS:深度优先搜索算法,就是一条路走到黑的算法,走不通了就往回走(一种一种的尝试,在把所有可能情况尝试)

解决的问题

如果只是要找到某一个结果是否存在,那么DFS会更高效。因为DFS会首先把一种可能的情况尝试到底,才会回溯去尝试下一种情况,只要找到一种情况,就可以返回了。但是BFS必须所有可能的情况同时尝试,在找到一种满足条件的结果的同时,也尝试了很多不必要的路径

BFS:宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一

系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止.空间复杂度为o(2^n)

回溯算法

回溯是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法

中序遍历

中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回

匈牙利算法Hungarian algorithm)。

匈牙利算法主要用于解决一些与二分图匹配有关的问题。

二分图Bipartite graph)是一类特殊的,它可以被划分为两个部分,每个部分内的点互不相连。

使用场景:求二分图的最大匹配数最小点覆盖数

滑动窗口

我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。
我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 t 中的所有字符)
我们停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求(不包含 T 中的所有字符了)。同时,每次增加 left,我们都要更新一轮结果
重复第 2 和第 3 步,直到 right 到达字符串 S 的尽头

  • 增加窗口右边界,寻找一个可行解,在找到可行解的情况下增加窗口左边界,优化可行解,找到最优解

二维数组创建坑

new Array(3).fill( new Array(4).fill(0)) (指向的是索引)

Array.from(Array(3), () => Array(4).fill(0)) 这种不会出现联动问题

new Array(2).fill(0).map(() => new Array(3).fill(0))

*map和set常用点

数组转map new Map(array)

map转数组 […map]

循环map for(let [key,value] of map.entries())

数组转set new Set(array)

set转数组 […set] ||Array.from(set)

循环对象 方法1:for (let [key,value] of Object.entries(obj))

​ 方法2: for(let key in obj) key obj[key]

对象转数组:Object.entries(obj)

数组转字符串 String(arr),常用来转二维数组,中间有逗号隔开

数字进制转换问题

parseInt(line,16) 16进制转10进制

toString()方法可以根据参数进行进制转换,如果不加参数,那么将基于十进制转换。转换的数字带有小数也可以转换

var a =625;a.toString(2)

Math

Math.cbrt数字的立方根

Math.pow(底数x,指数y) x的y次方 x**y

Math.abs(x)绝对值

~~Math.sqrt(0) 算数平方根

判断奇偶方法

if (n & 1)

n是偶数时候,二进制的末尾一定是0,那么&1的结果一定是false

当n是奇数时候,二进制末位一定是1,那么结果一定是true

截取数组

截取指定的数组或字符串,返回新的字符串或数组,相当于浅拷贝了一份,所以基础类型下 新旧值是不影响的

slice(-2,-1)表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

阶乘

12345 n!=(n-1)!×n。

闰年判断

if ((year % 4 == 0 && !(year % 100 == 0)) || year % 400 == 0) {
alert(‘闰年’);

​ var arr1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
} else {
​ alert(‘平年’);

​ var arr2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

}

//时间,是当年第几天

function getDay(date) {
var arr = date.split(‘-’);
var year = new Date(arr[0], 0, 0);
var mouth = new Date(arr[0], arr[1] - 1, arr[2]);
var day = parseInt((year - mouth) / 24 / 60 / 60 / 1000);
return day;

}

矩阵乘积
[m,n]*[n,p]=m*n*p [m,p]
概念

**“回文串”**是一个正读和反读都一样的字符串,初始化标志flag=true,比如“level”或者“noon”等等就是回文串

运算符特殊作用

~是js里的按位取反

**~~**双波浪号可以快速取整数,移除小数点后面的小数,不会进行四舍五入

& 按位与

n & 1 当n是偶数时候,二进制的末尾一定是0,那么&1的结果一定是false

map

判断当前存储空间是否被用尽,如果已用尽则删除 Map 头部的数据。
map.delete(map.keys().next().value)

进制转换

parseInt(num,8); //八进制转十进制
parseInt(num,16); //十六进制转十进制
parseInt(num).toString(8) //十进制转八进制
parseInt(num).toString(16) //十进制转十六进制
parseInt(num,2).toString(8) //二进制转八进制
parseInt(num,2).toString(16) //二进制转十六进制
parseInt(num,8).toString(2) //八进制转二进制
parseInt(num,8).toString(16) //八进制转十六进制
parseInt(num,16).toString(2) //十六进制转二进制
parseInt(num,16).toString(8) //十六进制转八进制

排序
字母忽视大小排序
a>=b?1:-1就是从小到大排序
letterArr.sort((a,b)=>{return a.toUpperCase()>=b.toUpperCase()?1:-1
})
子网掩码

最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地址数量是256-2,即254个。

zw=zw.map((val)=>val.toString(2).padStart(8,'0')).join('')
console.log(zw,/^1+0+$/.test(zw))  /保证前面是1后面是0

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

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

相关文章

时序预测 | MATLAB实现ELM极限学习机时间序列预测(多指标、相关图)

时序预测 | MATLAB实现ELM极限学习机时间序列预测(多指标、相关图) 目录 时序预测 | MATLAB实现ELM极限学习机时间序列预测(多指标、相关图)效果一览基本介绍程序设计学习总结参考资料效果一览 基本介绍 时序预测 | MATLAB实现ELM极

最大子数组和

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a;6 解…

前端-初始化Vue3+TypeScript

如果使用如下命令初始化项目&#xff0c;项目很干净&#xff0c;很适合了解项目的各个结构。 npm init vitelatest如果使用如下命令初始化项目&#xff0c;是可以选择你需要的组件 npm init vuelatest

vue根据template结构自动生成css/scss/less样式嵌套

vscode搜索安装插件&#xff1a;AutoScssStruct4Vue

十、接口(3)

本章概要 接口适配接口字段 初始化接口中的字段 接口嵌套接口和工厂方法模式 接口适配 接口最吸引人的原因之一是相同的接口可以有多个实现。在简单情况下体现在一个方法接受接口作为参数&#xff0c;该接口的实现和传递对象则取决于方法的使用者。 因此&#xff0c;接口的…

Linux 系统的如何优化(面试题)

Linux 系统的如何优化&#xff08;面试题&#xff09; (1) 禁用不需要的服务 ntsysv 命令最为方便&#xff0c;执行后&#xff0c;把不需要的勾选去掉就行 &#xff08;2&#xff09;避免直接使用root用户&#xff0c;普遍用户通过sudo授权操作 &#xff08;3&#xff09;通过…

wustojc日期格式变化

#include <stdio.h> int main() {char a[10];for(int i0;i<10;i){//用一个耍聪明的方法&#xff0c;全部用数组存储&#xff1b;面向结果编程a[0]getchar();}printf("%c%c%c%c%c%c%c%c%c%c",a[6],a[7],a[8],a[9],a[2],a[0],a[1],a[5],a[3],a[4]);return 0;}…

数据结构:栈和队列

文章目录 一、栈1.栈的概念及结构1.栈的概念及结构2.栈的实现 2.栈的顺序表实现1.栈的结构体和实现的功能函数2.栈的初始化&#xff0c;入栈和出栈操作3.栈的其他操作 3.栈的链表实现1.栈的结构体和实现的功能函数2.栈功能函数的实现 二、队列1.队列的概念及结构1.队列的概念及…

【使用教程】在Ubuntu下运行CANopen通信PMM伺服电机使用教程(NimServoSDK_V2.0.0)

本教程将指导您在Ubuntu操作系统下使用NimServoSDK_V2.0.0来运行CANopen通信的PMM系列一体化伺服电机。我们将介绍必要的步骤和命令&#xff0c;以确保您能够成功地配置和控制PMM系列一体化伺服电机。 NimServoSDK_V2.0.0是一款用于PMM一体化伺服电机的软件开发工具包。它提供了…

每日一学——交换机

交换机是一种网络设备&#xff0c;用于连接多台计算机和其他网络设备&#xff0c;以实现数据的交换和传输。它通过将数据包在不同端口之间转发&#xff0c;将数据从一个设备发送到目标设备。交换机可以提供高速、可靠和安全的局域网连接。 交换机的工作原理是根据目标MAC地址来…

Harmony OS教程学习笔记

基础知识 1.如何修改程序启动的第一个页面&#xff1f; 不想使用创建的默认的页面&#xff0c;这时需要修改启动页面&#xff0c;修改的地方在EntryAbility文件中的onWindowStageCreate方法中。 onWindowStageCreate(windowStage: window.WindowStage) {// Main window is cr…

【爬虫】Urllib让我们的 python 假装是浏览器

在 Python 这个内置的 Urllib 库中&#xff0c;有这么 4 个模块&#xff1a; request&#xff0c;request模块是我们用的比较多的&#xff0c;就是用它来发起请求&#xff0c;所以我们重点说说这个模块。error&#xff0c;error模块呢&#xff0c;就是当我们在使用 request 模…

Golang Gorm 更新字段 save update updates

更新和删除操作的前提条件都是要在找到数据的情况下&#xff0c;先要查询到数据才可以做操作。 更新的前提的先查询到记录&#xff0c;Save保存所有字段&#xff0c;用于单个记录的全字段更新它会保控所有字段&#xff0c;即使零值也会保存。 在更新和删除之前&#xff0c;要利…

远程线程注入(简单样例以及原理)

远程线程注入(简单样例以及原理) 注入的目标是将我们的代码注入到目标进程的地址空间中 注入通常可以根据注入的内容分为两种类型&#xff1a; shellcode注入 &#xff1a;这种注入是将我们的代码直接注入到目标内存中&#xff0c;这就要保证我们的代码在贴到其他地址上后仍…

交叉熵--损失函数

目录 交叉熵&#xff08;Cross Entropy&#xff09; 【预备知识】 【信息量】 【信息熵】 【相对熵】 【交叉熵】 交叉熵&#xff08;Cross Entropy&#xff09; 是Shannon信息论中一个重要概念&#xff0c; 主要用于度量两个概率分布间的差异性信息。 语言模型的性能…

Azure静态网站托管

什么是静态网站托管 Azure Blob的静态网站托管是一项功能&#xff0c;它允许开发人员在Azure Blob存储中托管和发布静态网站。通过这个功能&#xff0c;您可以轻松地将静态网页、图像、视频和其他网站资源存储在Azure Blob中&#xff0c;并直接通过提供的URL访问这些资源。 官…

使用VisualStudio制作上位机(一)

文章目录 使用VisualStudio制作上位机(一)写在前面第一部分:创建应用程序第二部分:GUI主界面设计使用VisualStudio制作上位机(一) Author:YAL 写在前面 1.达到什么目的呢 本文主要讲怎么通过Visual Studio 制作上位机,全文会以制作过程来介绍怎么做,不会去讲解具体…

css 实现svg动态图标效果

效果演示&#xff1a; 实现思路&#xff1a;主要是通过css的stroke相关属性来设置实现的。 html代码: <svgt"1692441666814"class"icon"viewBox"0 0 1024 1024"version"1.1"xmlns"http://www.w3.org/2000/svg"p-id"…

操作符详解(1)

1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1. 除了 % 操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 2. 对…

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案

一&#xff0c;什么是缓存穿透、雪崩、击穿&#xff1f; 1、缓存穿透&#xff1a; 是指用户查询数据&#xff0c;在数据库没有&#xff0c;自然在缓存中也不会有。这样就导致用户查询的时候&#xff0c;在缓存中找不到&#xff0c;每次都要去数据库再查询一遍&#xff0c;然后…