JavaScript
文章平均质量分 64
Three_ST
学习者
展开
-
数据结构与算法之LeetCode-655. 输出二叉树 - 力扣(LeetCode)
二叉树,dfs,bfs原创 2022-09-24 22:10:02 · 780 阅读 · 0 评论 -
数据结构与算法之LeetCode-1224. 最大相等频率 - 力扣(LeetCode)
使用哈希表map记录某个数字x出现的次数map[x],freq记录出现次数为f的数的数目为freq[f],maxFreq表示最大出现次数。以某个字符nums[i]结尾的数组前缀合要求的充要条件为满足以下三个条件之一:- 最大出现次数maxFreq = 1,那么所有数的出现次数都是一次,随意删除一个数即可符合要求- 所有数的出现次数都是maxFreq或者maxFreq-1,并且最大出现次数的数只有一个,删除一个最大出现次数的数,那么所有数的出现次数都是maxFreq-1- 除开一个数,其他所有数的出现原创 2022-09-20 21:30:10 · 688 阅读 · 0 评论 -
数据结构与算法之LeetCode-640. 求解方程(数学模拟)
- factor表示变量的系数,val表示常量值- 使用系数sign1表示默认系数,解析到等号时,说明解析到等式右边的项,令sign1 = -1- 使用sign2表示项的符号,初识时sign2 = sign1 。解析到‘+’,‘-’,要么相应的更改sign2,使用number记录数字,valid表示number是否有效- 如果解析到变量,那么相应的更改factor- 如果解析到的是常量项,那么相应的更改val- 如果factor=0,说明变量x对方程无影响,然后判断val=0 是否成立,成立则说明原创 2022-08-10 21:16:06 · 495 阅读 · 0 评论 -
数据结构与算法之LeetCode- 1408. 数组中的字符串匹配
1408. 数组中的字符串匹配 - 力扣(LeetCode)- 按照题目要求,想到排序,只有长的才能包含短的- 因此就做条件判断原创 2022-08-06 23:23:24 · 820 阅读 · 0 评论 -
数据结构与算法之LeetCode-241. 为运算表达式设计优先级
一个整数区间[a, b](a < b) 代表着从a到b的所有连续整数,包括a和b。给你一组整数区间intervals,请找到一个最小的集合 S,使得 S 里的元素与区间intervals中的每一个整数区间都至少有2个元素相交。输出这个最小集合S的大小。......原创 2022-07-22 22:11:01 · 965 阅读 · 0 评论 -
数据结构与算法之LeetCode-515. 在每个树行中找最大值(DFS,BFS)
515. 在每个树行中找最大值 - 力扣(LeetCode)DFS,BFS 数据结构与算法BFS参考链接515. 在每个树行中找最大值 - 力扣(LeetCode)在每个树行中找最大值 - 在每个树行中找最大值 - 力扣(LeetCode)【宫水三叶】树的搜索运用题 - 在每个树行中找最大值 - 力扣(LeetCode)在每个树行中找最大值【BFS和DFS】 - 在每个树行中找最大值 - 力扣(LeetCode)...原创 2022-06-24 22:35:32 · 211 阅读 · 0 评论 -
数据结构与算法之LeetCode-467. 环绕字符串中唯一的子字符串(动态规划速度100%)
467. 环绕字符串中唯一的子字符串 - 力扣(LeetCode)DPs是周期性字符串,在s的子串中,只要知道子串的第一个字符或者最后一个字符和子串长度,就可以确定这个子串。例如如果子串以‘d’结尾,长度为3,那么该子串为’bcd’对于同一个字符串结尾的字符,长的那个子串必然包括短的那个。例如’abcd’和’bcd’都以‘d’结尾,’bcd’是‘abcd’的子串var findSubstringInWraproundString = function{p){ const dp = new A原创 2022-05-25 21:38:40 · 108 阅读 · 0 评论 -
前端项目实战之Vue3.0+Three.js+TypeScript+Vite搭建一个设备数字化三维展厅(一)
效果预览项目结构引用组件Vue3.0+Vitenpm create vite npm i @types/node --save-dev vue-routernpm i vue-router --save-dev1.新建一个router目录2.在router目录下创建一个index.ts文件2.1.在目录中添加需要路由的模块2.2.设置路由模式3.在main.ts中引入routerthreejs安装 three.js的type安装 threenpm i原创 2022-05-11 21:09:19 · 2026 阅读 · 0 评论 -
JavaScript进阶之事件处理-Eventloop(微任务,宏任务,promise,async,await)
Javascript 之 Event Loop1^在JavaScript中,任务被分为两种,一种宏任务(MacroTask)也叫Task,一种叫微任务(MicroTask)。事件流事件流描述的是从页面中接受事件的顺序,事件 捕获阶段 处于目标阶段 事件冒泡阶段 addeventListener 最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。1、事件捕获阶段:实际目标div在捕获阶段不会接受事件,也就是在捕获阶段,事件从docum转载 2022-05-02 09:53:59 · 232 阅读 · 0 评论 -
数据结构与算法之LeetCode-38-外观数列(递归和枚举实现 超过97%的提交)
38. 外观数列 - 力扣(LeetCode) (leetcode-cn.com)递归结合题意,实现一个hash表,存储前面的数据,然后大于10的从后面提取/** * @param {number} n * @return {string} */var countAndSay = function(n) { const map = new Map(); map.set(1,'1'); map.set(2,'11'); map.set(3,'21'); m原创 2022-04-06 22:14:23 · 975 阅读 · 0 评论 -
数据结构与算法之LeetCode-125.验证回文串(正则匹配与双指针)
125. 验证回文串 - 力扣(LeetCode) (leetcode-cn.com)##### 解法利用正则表达式 只保留数字和字符let newS = s.toLowerCase().match(/[a-z0-9]+/g);console.log(newS);// ['i','am', 'bill', 'llib', 'ma', ]// 使用match方法在字符串内索引指定值/找到一个或多个正则表达式的匹配// 查找从a到z的字符,并返回匹配值var isPalindrome = f原创 2022-03-07 22:45:34 · 386 阅读 · 0 评论 -
数据结构与算法之LeetCode-72-编辑距离
72. 编辑距离 - 力扣(LeetCode) (leetcode-cn.com)/** * @param {string} word1 * @param {string} word2 * @return {number} */var minDistance = function (word1, word2) { let dp = Array.from(Array(word1.length + 1), () => Array(word2.length + 1).fill(0)原创 2022-02-24 22:16:05 · 614 阅读 · 0 评论 -
数据结构与算法之LeetCode-201-数字范围按位与
201. 数字范围按位与 - 力扣(LeetCode) (leetcode-cn.com)位运算/** * @param {number} left * @param {number} right * @return {number} */var rangeBitwiseAnd = function(left, right) { while(right>left){ right&=(right-1) } return right;};原创 2022-02-13 11:37:17 · 327 阅读 · 0 评论 -
数据结构与算法之LeetCode-300-最长递增子序列
300. 最长递增子序列 - 力扣(LeetCode) (leetcode-cn.com)动态规划两层遍历计算第二层遍历中是否增加/** * @param {number[]} nums * @return {number} */var lengthOfLIS = function(nums) { if(nums.length == 0){ return 0; } let dp = new Array(nums.length).fill(0); dp[0原创 2022-02-05 15:23:28 · 724 阅读 · 0 评论 -
数据结构与算法之 Leetcode-1091-二进制矩阵中的最短路径
1091. 二进制矩阵中的最短路径BFS 广度优先遍历在用广度优先搜索的时候,脑海里面有一张如下的图:先把起始点加入到队列当中,最外层的while控制只要队列中有元素就一直循环取队头元素进行扩散第二个for循环(或者简写方法的while循环)主要是控制当前这一层的元素的扩散每次都是取队头元素进行扩散题目当中可以对当前元素的四面八方进行扩散,所以声明了一个directions数组方便循环扩散/** * @param {number[][]} grid * @return {numb原创 2022-01-28 10:38:47 · 1196 阅读 · 0 评论 -
数据结构与算法之LeetCode-15-三数之和
15.三数之和二分法 先确定一个初始位置再用下一个位置,与最后的位置开始二分搜索不断向中间搜索确定一个终止位置/** * @param {number[]} nums * @return {number[][]} */var threeSum = function(nums) { let ans = []; const len = nums.length; if(nums == null || len < 3) return ans; nums.so原创 2022-01-23 22:26:26 · 625 阅读 · 0 评论 -
数据结构与算法之LeetCode 844. 比较含退格的字符串
844. 比较含退格的字符串使用栈考虑题目要求遇到退格符号,就会删除前一个字符,一般想法是在下一个数字是退格符号时,将前一个符号从字符串中删除,这个时候想到可以使用栈这个结构来保存字符串。/** * @param {string} s * @param {string} t * @return {boolean} */var backspaceCompare = function(s, t) { return build(s)==build(t);};var build = f原创 2022-01-22 13:59:51 · 448 阅读 · 0 评论 -
数据结构算法之二分搜索查找多位矩阵中的数据
74. 搜索二维矩阵在一个m*n维矩阵中搜索某一个给定值,如果存在则返回true,如果不存在则返回 false一次二分法使用解题想法,根据前面 33题的解题思路,使用搜索算法,先计算数组的行数m和n得到起始位 start = 0终止位 end = m*n - 1中间位 mid = start + ((end-start)>>1)判断当前值处于那个区间取出数组的开始和末尾两个数比较中位数与目标值之间的差距(如果处于 start-》mid 区间,处于mid-end区间)逐渐原创 2022-01-05 22:11:40 · 545 阅读 · 0 评论 -
数据结构与算法之Leetcode-深度遍历与广度遍历(DFS&BFS)
DFS(深度优先搜索)和 BFS(广度优先搜索)就像孪生兄弟,提到一个总是想起另一个。然而在实际使用中,我们用 DFS 的时候远远多于 BFS。那么,是不是 BFS 就没有什么用呢?如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做不到的,只能使用 BFS 遍历。这就是本文要介绍的两个场景:「层序遍历」、「最短路径」。var dfs = funct原创 2021-12-25 23:15:04 · 197 阅读 · 0 评论 -
数据结构与算法之LeetCode-二叉树遍历(JavaScript递归实现)
通过递归实现二叉树的遍历二叉树的前序/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right)原创 2021-12-08 23:11:41 · 726 阅读 · 0 评论 -
LeetCode-1404 将二进制表示减到1的步骤数
1404. 将二进制表示减到 1 的步骤数给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数,则将其除以 2 。如果当前数字为奇数,则将其加上 1 。题目保证你总是可以按上述规则将测试用例变为 1 。numberProcess(num){ }...原创 2021-11-29 23:13:51 · 132 阅读 · 0 评论 -
LeetCode 88 合并两个有序数组(slice)
array.splice(start[, deleteCount[, item1[, item2[, …]]]])参数start指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);如果负数的绝对值大于数组的长度,则表示开始位置为第0位。deleteCount 可选整数,表示要移除的数组元素的个数。如果 deleteCount 大于 star.原创 2021-11-12 00:03:34 · 122 阅读 · 0 评论 -
JavaScript之字符串常用函数与方法
String字符串常见操作charAt(x)charCodeAt(x)concat(v1,v2…)fromCharcode(c1,c2)indexOf(substr, [start])lastIndexOf(substr, [start])match(regexp)replace(regexp/substr, replacetext)search(regexp)slice(start, [end])split(delimiter, [limit])substr(start, [l转载 2021-10-31 19:53:45 · 142 阅读 · 0 评论 -
JavaScript之可能会用到的二十个小技巧
1.一句代码实现多维数组扁平化const arr = [1, 2, 3, [4, [5, 6, [7,8]]]];// 方式1:console.log(arr.flat(Infinity));// 方式2:console.log(arr.join().split(','));// 方式3:console.log(arr.toString().split(','));// 在查阅资料中,博主发现原来join()、toString()函数式可以跨越层级的,于是便有了方式2、 3参考链接ht原创 2021-10-29 22:31:30 · 635 阅读 · 0 评论 -
JavaScript基础之实现部分原生与有趣的api(一)
JS实现原生api::: tipES5实现map()方法Array.prototype.MyMap = function(fn,context){ var arr = Array.prototype.slice.call(this); //es5 不需要用...展开 var mappedArr = []; for(var i =0;i<arr.length;i++){ if(!arr.hasOwnProperty(i))continue;原创 2021-10-28 23:17:12 · 299 阅读 · 0 评论 -
浏览器工作原理与实践|16:WebApi setTimeout是怎么实现的
浏览器页面是由消息队列和事件循环系统来驱动的。过setTimeout和XMLHttpRequest这两个 WebAPI 来介绍事件循环的应用。这两个 WebAPI 是两种不同类型的应用,比较典型,并且在JavaScript 中的使用频率非常高。setTimeout它就是一个定时器,用来指定某个函数在多少毫秒之后执行。它会返回一个整数,表示定时器的编号,同时你还可以通过该编号来取消这个定时器。function showName(){ console.log("极客时间")}var timerID转载 2021-10-26 21:34:17 · 169 阅读 · 0 评论 -
JavaScript基础-防抖与节流实现及其使用
防抖与节流函数是一种最常用的 高频触发优化方式,能对性能有较大的帮助。防抖 (debounce):将多次高频操作优化为只在最后一次执行,通常使用的场景是:用户输入,只需再输入完成后做一次输入校验即可。立即防抖触发事件后函数会立即执行,然后n秒内不触发事件才会执行函数的效果function debounce(fn,wait){ let timeout = null; let context = this; let args = arguments; return fu原创 2021-09-26 22:44:18 · 73 阅读 · 0 评论 -
JavaScript 基础之 关于js中的Array.sort()的使用
这里写自定义目录标题怪异行为怪异行为Array.sort((a,b)=>{a - b});在Chrome和Firefox下面执行的结果有些不一致chrome edgeconst months = ['March', 'Jan', 'Feb', 'Dec'];months.sort();console.log(months);// expected output: Array ["Dec", "Feb", "Jan", "March"]const array1 = [1, 30原创 2021-09-17 21:52:56 · 609 阅读 · 0 评论 -
手写JavaScript之实现一个EventBus
EventBus是消息传递的一种方式,基于一个消息中心,订阅和发布消息的模式。设计模式:订阅者发布者模式API设计只能构造一个消息对象on(‘msgName’,func)订阅消息, msgname订阅的消息名称;func订阅的消息one(‘msgName’,func)经订阅一次消息,后订阅的会替换前面订阅的消息emit(‘msgname’,msg)发布消息 msgName;消息名称 msg:发布的消息off('msgName)移除消息代码实现//构造EventBusEventBusC原创 2021-08-31 20:41:10 · 205 阅读 · 0 评论 -
JavaScript实现自定义Event(omit,once,addEventListener)
自定义实现JavaScript中的事件函数,包括AddListener,RemoveListener,Once,Emit等方法function EventEmitter(){ this.events = new Map();}// 实现方法// addEventListenerconst wrapCallback = (fn,once=false)=>({callback:fn,once});EventEmitter.prototype.addListener = function原创 2021-08-30 21:15:26 · 515 阅读 · 0 评论 -
JavaScript知识之正则表达式(RegExp)
描述字面量和构造函数有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。字面量由斜杠(/)包围而不是引号包围。构造函数的字符串参数由引号而不是斜杠包围。以下三种表达式都会创建相同的正则表达式:/ab+c/i; //字面量形式new RegExp('ab+c', 'i'); // 首个参数为字符串模式的构造函数new RegExp(/ab+c/, 'i'); // 首个参数为常规字面量的构造函数当表达式被赋值时,字面量形式提供正则表达式的编译(co.原创 2021-08-24 22:06:34 · 284 阅读 · 0 评论 -
web前端之浏览器V8垃圾回收机制
Chrome V8 & JavaScript垃圾回收机制垃圾数据回收分为手动回收和自动回收两种策略。何时分配内存、何时销毁内存都是由代码控制的//在堆中分配内存char* p =(char*)malloc(2048);//在堆空间中分配2048字节的空间,并将分配后的引用地址保存//使用p指向的内存{ //....}//使用结束后,销毁这段内存free(p);p = NULL;从上面这段 C 代码可以看出来,要使用堆中的一块空间,我们需要先调用 mallco 函数分配内存原创 2021-07-12 21:40:14 · 126 阅读 · 0 评论 -
Web前端之浏览器拍照实现-浏览器原生API实现全像素拍照(不同于论坛大多数的拍照方法)
浏览器拍照上面一篇是利用mediaStream获取视频流,通过视频流截图实现拍照功能,但是问题是像素和画质较差,对于有较高要求的场景不能满足,因此继续搜索相关资料 ,这方面的权威肯定是MDN,因此在MDN上搜素能够实现拍照的API,终于在搜素过程中发现了一个实验性功能,只有chromium webkit内核的浏览器才支持该功能。ImageCapture() constructor这个就是本次要讨论的功能,这个API能够调用相机实现拍照,也是从mediaStream中获取视屏流,但是这个是为了显示当前传原创 2021-07-07 17:10:10 · 1579 阅读 · 0 评论 -
前端(JavaScript)基础知识学习之浏览器相关与通信、跨域(CORS)
浏览器相关知识浏览器内核浏览器/RunTime|:内核(渲染引擎)|JavaScript 引擎–:|:–|:–Chrome |Blink(28~) Webkit(Chrome 27) |V8FireFox |Gecko | SpiderMonkeySafari |Webkit| JavaScriptCoreEdge |EdgeHTML |Chakra(for JavaScript)IE |Trident |Chakra(for JScript)PhantomJS |Webkit |Java原创 2021-06-30 23:14:58 · 130 阅读 · 0 评论 -
前端基础知识学习之-ShadowDOM&LightDOM
DOMDOM和SAXW3C制定了一套书写XML分析器的标准接口规范——DOM。除此以外,XML_DEV邮件列表中的成员根据应用的需求也自发地定义了一套对XML文档进行操作的接口规范——SAX。这两种接口规范各有侧重,互有长短,应用都比较广泛。应用程序开发过程中,应用程序不是直接对XML文档进行操作的,而是首先由XML分析器对XML文档进行分析。然后,应用程序通过XML分析器所提供的DOM接口或SAX接口对分析结果进行操作,从而间接地实现了对XML文档的访问。DOM介绍 优缺点分析DOM: D原创 2021-05-30 14:31:37 · 1079 阅读 · 2 评论 -
前端知识Angular之ng-template,ng-content,ng-container和* ngTemplateOutlet
您需要了解有关Angular中的ng-template,ng-content,ng-container和* ngTemplateOutlet的所有信息普拉泰克·米什拉(Prateek Mishra)那是我忙于为Office项目开发新功能的日子之一。突然间,一些事情引起了我的注意:最终在Angular中渲染的DOM在检查DOM时,我看到ngcontentAngular将其应用于元素。嗯……如果它们包含最终DOM中的元素,那么有什么用<ng-container>?那时我&l翻译 2021-02-19 22:13:12 · 832 阅读 · 1 评论 -
数据结构与算法之并查集基础知识
一个开源的个人学习计算机科学知识成长记录(前后端,数据结构与算法)并查集并查集主要用于解决元素分组问题,它支持对不相交的几何操作,主要是以下两种操作:合并(Union) 合并两个不相交的集合**查询(Find)**查询两个元素是否在同一个集合中图结构初始化假如有编号为1, 2, 3, …, n的n个元素,我们用一个数组fa[]来存储每个元素的父节点(因为每个元素有且只有一个父节点,所以这是可行的)。一开始,我们先将它们的父节点设为自己。const init = function(n){原创 2021-02-18 20:02:58 · 101 阅读 · 0 评论 -
node.js 安装与环境变量配置
Node.jsNode.js 是一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具!Node.js 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使 Node.js 表现得非常出色。Node.js 应用程序运行于单个进程中,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js 中的库通常是使用非阻塞的范式编写原创 2021-01-10 13:19:01 · 974 阅读 · 0 评论 -
web前端基础知识之浏览器内核与页面渲染流程
浏览器内核浏览器/RunTime|:内核(渲染引擎)|JavaScript 引擎–:|:–|:–Chrome |Blink(28~) Webkit(Chrome 27) |V8FireFox |Gecko | SpiderMonkeySafari |Webkit| JavaScriptCoreEdge |EdgeHTML |Chakra(for JavaScript)IE |Trident |Chakra(for JScript)PhantomJS |Webkit |JavaScriptCo原创 2020-12-23 21:13:33 · 129 阅读 · 0 评论 -
前端基础知识之浏览器重绘与回流
回流与重绘回流: 部分渲染树(或者整个渲染树)需要重新分析并且节点尺寸需要重新计算,表现为重新生成布局,重新排列元素重绘: 由于节点的几何属性发生改变或者由于样式发生改变,例如改变元素背景色时,屏幕上的部分内容需要更新,表现为某些元素的外观被改变单单改变元素的外观,肯定不会引起网页重新生成布局,但当浏览器完成回流之后,将会重新绘制受到此次回流影响的部分回流和重绘代价是高昂的,它们会破坏用户体验,并且让 UI 展示非常迟缓,而相比之下回流的性能影响更大,在两者无法避免的情况下,一般我们宁可选择代价原创 2020-12-17 21:16:32 · 156 阅读 · 0 评论