
JavaScript
文章平均质量分 58
Three_ST
学习者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浏览器工作原理与实践-12|栈空间和堆空间:数据是如何存储的
12|栈空间和堆控件:数据是如何存储的JavaScript内存机制function foo(){ var a = 1 var b = a a = 2 console.log(a) // 2 console.log(b) // 2}foo()function foo(){ var a = {name:"极客时间"} var b = a a.name = "极客邦" console.log(a) // {name:"极客邦"} console.log(b) // {name:"极原创 2024-12-23 23:41:06 · 955 阅读 · 0 评论 -
浏览器工作原理与实践|合成机制:为什么CSS动画比JavaScript高效?
重排、重绘和合成重排,通常渲染路径越长,生成图像花费的时间就越多重绘 没有了重新布局的阶段,操作效率稍微高点,但是依然需要重新计算绘制信息,并触发绘制操作之后的一系列操作。合成 操作的路径就显得非常短了,并不需要触发布局和绘制两个阶段,如果采用了 GPU,那么合成的效率会非常高分层和合成为了提升每帧的渲染效率,Chrome 引入了分层和合成的机制。那该怎么来理解分层和合成机制呢?在 Chrome 的渲染流水线中,分层体现在生成布局树之后,渲染引擎会根据布局树的特点将其转换为层树(Layer Tr原创 2024-11-24 09:54:33 · 512 阅读 · 0 评论 -
数据结构与算法之 leetcode 17. 电话号码的字母组合
【代码】数据结构与算法之 leetcode 17. 电话号码的字母组合。原创 2024-07-15 18:06:03 · 272 阅读 · 0 评论 -
数据结构与算法之 leetcode 78. 子集
【代码】数据结构与算法之 leetcode 78. 子集。原创 2024-06-27 10:54:16 · 197 阅读 · 0 评论 -
数据结构与算法之 leetcode 103. 二叉树的锯齿形层序遍历
【代码】数据结构与算法之 leetcode 103. 二叉树的锯齿形层序遍历。原创 2024-06-11 10:08:36 · 202 阅读 · 0 评论 -
数据结构与算法之 leetcode 513. 找树左下角的值 (BFS) 广度优先
【代码】数据结构与算法之 leetcode 513. 找树左下角的值 (BFS) 广度优先。原创 2024-06-05 19:00:00 · 334 阅读 · 0 评论 -
数据结构与算法之 leetcode 102. 二叉树的层序遍历
【代码】数据结构与算法之 leetcode 102. 二叉树的层序遍历。原创 2024-06-05 08:00:00 · 231 阅读 · 0 评论 -
数据结构与算法之 leetcode 142. 环形链表 II
【代码】数据结构与算法之 leetcode 142. 环形链表 II。原创 2024-05-22 07:19:31 · 221 阅读 · 0 评论 -
数据结构与算法之 leetcode 713. 乘积小于 K 的子数组(双指针)
数据结构与算法之 leetcode 713. 乘积小于 K 的子数组(双指针)原创 2024-05-17 08:00:00 · 233 阅读 · 0 评论 -
leetcode-42. 接雨水(双指针,前缀)
【代码】leetcode-42. 接雨水(双指针,前缀)原创 2024-05-16 08:00:00 · 259 阅读 · 0 评论 -
leetcode-11. 盛最多水的容器(双指针)
leetcode-11. 盛最多水的容器(双指针)原创 2024-05-14 22:52:16 · 246 阅读 · 0 评论 -
数据结构与算法之LeetCode-655. 输出二叉树 - 力扣(LeetCode)
二叉树,dfs,bfs原创 2022-09-24 22:10:02 · 948 阅读 · 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 · 770 阅读 · 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 · 581 阅读 · 0 评论 -
数据结构与算法之LeetCode- 1408. 数组中的字符串匹配
1408. 数组中的字符串匹配 - 力扣(LeetCode)- 按照题目要求,想到排序,只有长的才能包含短的- 因此就做条件判断原创 2022-08-06 23:23:24 · 887 阅读 · 0 评论 -
数据结构与算法之LeetCode-241. 为运算表达式设计优先级
一个整数区间[a, b](a < b) 代表着从a到b的所有连续整数,包括a和b。给你一组整数区间intervals,请找到一个最小的集合 S,使得 S 里的元素与区间intervals中的每一个整数区间都至少有2个元素相交。输出这个最小集合S的大小。......原创 2022-07-22 22:11:01 · 1063 阅读 · 0 评论 -
数据结构与算法之LeetCode-515. 在每个树行中找最大值(DFS,BFS)
515. 在每个树行中找最大值 - 力扣(LeetCode)DFS,BFS 数据结构与算法BFS参考链接515. 在每个树行中找最大值 - 力扣(LeetCode)在每个树行中找最大值 - 在每个树行中找最大值 - 力扣(LeetCode)【宫水三叶】树的搜索运用题 - 在每个树行中找最大值 - 力扣(LeetCode)在每个树行中找最大值【BFS和DFS】 - 在每个树行中找最大值 - 力扣(LeetCode)...原创 2022-06-24 22:35:32 · 325 阅读 · 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 · 167 阅读 · 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 · 2350 阅读 · 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 · 335 阅读 · 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 · 1024 阅读 · 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 · 454 阅读 · 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 · 696 阅读 · 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 · 452 阅读 · 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 · 799 阅读 · 0 评论 -
数据结构与算法之 Leetcode-1091-二进制矩阵中的最短路径
1091. 二进制矩阵中的最短路径BFS 广度优先遍历在用广度优先搜索的时候,脑海里面有一张如下的图:先把起始点加入到队列当中,最外层的while控制只要队列中有元素就一直循环取队头元素进行扩散第二个for循环(或者简写方法的while循环)主要是控制当前这一层的元素的扩散每次都是取队头元素进行扩散题目当中可以对当前元素的四面八方进行扩散,所以声明了一个directions数组方便循环扩散/** * @param {number[][]} grid * @return {numb原创 2022-01-28 10:38:47 · 1295 阅读 · 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 · 695 阅读 · 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 · 545 阅读 · 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 · 615 阅读 · 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 · 283 阅读 · 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 · 822 阅读 · 0 评论 -
LeetCode-1404 将二进制表示减到1的步骤数
1404. 将二进制表示减到 1 的步骤数给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数,则将其除以 2 。如果当前数字为奇数,则将其加上 1 。题目保证你总是可以按上述规则将测试用例变为 1 。numberProcess(num){ }...原创 2021-11-29 23:13:51 · 227 阅读 · 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 · 176 阅读 · 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 · 201 阅读 · 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 · 735 阅读 · 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 · 393 阅读 · 0 评论 -
浏览器工作原理与实践|16:WebApi setTimeout是怎么实现的
浏览器页面是由消息队列和事件循环系统来驱动的。过setTimeout和XMLHttpRequest这两个 WebAPI 来介绍事件循环的应用。这两个 WebAPI 是两种不同类型的应用,比较典型,并且在JavaScript 中的使用频率非常高。setTimeout它就是一个定时器,用来指定某个函数在多少毫秒之后执行。它会返回一个整数,表示定时器的编号,同时你还可以通过该编号来取消这个定时器。function showName(){ console.log("极客时间")}var timerID转载 2021-10-26 21:34:17 · 235 阅读 · 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 · 136 阅读 · 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 · 851 阅读 · 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 · 291 阅读 · 0 评论