自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

连通块的应用

并查集+优先队列 字典序输出

  • 博客(93)
  • 收藏
  • 关注

原创 【javascript】js类型转换

文章目录1. 基本类型转换2. 显示类型转换3. 对象转换为原始值1. 基本类型转换值转为字符串数字布尔值对象undefined‘undefined’NaNfalsethrows TypeErrornull‘null’0falsethrows TypeErrortrue‘true’1new Boolean(true)false‘false’0new Boolean(false)“”(空字符串)0falsenew S

2020-06-25 19:01:57 272

原创 【剑指offer】树的深度非递归JS

题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度思路:使用层次遍历,在每一层节点的末尾加上标记0,每次出队列遇到标记0,深度+1;关键点是最后一个标记,此时队列为空,要特判function treeDepth(pRoot){ if(pRoot== null)return 0; let deep = 1;...

2020-04-08 22:21:11 306

原创 【JavaScript】JS中call为什么比apply快?

为什么call 比apply 快?这里就要提到他们被调用之后发生了什么。Function.prototype.apply (thisArg, argArray)1、如果IsCallable(Function)为false,即Function不可以被调用,则抛出一个TypeError异常。2、如果argArray为null或未定义,则返回调用function的[[Call]]内部方法的...

2020-03-02 10:59:47 290 1

原创 【剑指offer】二叉树中和为某一值的路径(JS)

题目描述:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:看到这个题,首先想到深搜????,深度遍历直到叶子节点,不符合条件再出栈回到上一层节点,注意结束条件以及最后的回溯????/* function TreeNode(x) { ...

2020-02-28 16:24:58 441

原创 【剑指offer】二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:二叉搜索树的特点:根节点的左子树上的值都比它小,右子树上的值都比它大1.找出序列中左右子树的分界点,即从数组起始点开始第一个比根节点(后序序列的最后一个值)大的值,其为flag2.若右子树的值都比根节点大,则它是某个二叉搜索树的后...

2020-02-28 15:01:53 122

原创 【剑指offer】栈的压入、弹出序列(JS实现)

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:<借鉴别人思路>借助一个辅助栈,遍历压栈序列,先将第一个...

2020-02-28 11:26:12 226

原创 【剑指offer】包含Min函数的栈(JS实现)

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。思路:维护两个栈A,B,分别记录输入的所有值 和 最小值每输入一个值,正常入A栈,但是如果比栈B的栈顶元素小的话,则入B栈,否则B中的栈顶元素重复入栈一次,这样做是为了保证每次取最小值...

2020-02-28 10:54:12 196

原创 【剑指offer】顺时针打印矩阵(JS实现)

题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:打印循环结束的条件是每个轮回开始点下标的2倍超过矩阵的大小function printMatrix(m...

2020-02-27 15:18:42 293

原创 【剑指offer】树的子结构(JS实现)

题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:如果A,B根节点值相同,进一步判断其子树的值;否则在A的左子树、右子树中寻找/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */ function...

2020-02-27 12:45:32 242

原创 【剑指offer】链表中倒数第k个结点(JS实现)

题目描述输入一个链表,输出该链表中倒数第k个结点。思路一:两个指针:fast、slow,快指针先走k-1步,之后两个指针一起走,同样的速度,当快指针到达链表末尾的时候,慢指针正好走到目标节点/*function ListNode(x){ this.val = x; this.next = null;}*/function FindKthToTail(head, k)...

2020-02-27 12:13:56 207

原创 【剑指offer】反转链表

每次遇到就地反转的链表就得写好久,几个指针指来指去,搞得晕头转向,这次可把它理清楚了????????????题目描述输入一个链表,反转链表后,输出新链表的表头。思路:我采用的是就地反转/*function ListNode(x){ this.val = x; this.next = null;}*/function ReverseList(pHead){ // wr...

2020-02-26 14:27:12 104

转载 【JavaScript】正则表达式

引用一个博主的总结,非常详细正则表达式

2020-02-25 15:14:23 106

转载 【JavaScript】JS进制转换

//十进制转其他var x=110;alert(x.toString(2));alert(x.toString(8));alert(x.toString(32));alert(x.toString(16));//其他转十进制var x=‘110’;alert(parseInt(x,2));alert(parseInt(x,8));alert(parseInt(x,16));...

2020-02-25 13:50:36 324

原创 【剑指offer】二进制中1的个数(JS实现)

题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。方法一:把一个整数减去1,再和原来的整数做相与运算,会把该整数二进制的最右边的1变成0,一个整数中有多少个1,就可以进行多少次上述的相与运算function NumberOf1(n){ // write code here //把一个整数减去1,再和原来的整数做相与运算,会把该整数二进制的最右边的1...

2020-02-25 13:47:02 183

原创 【剑指offer】滑动窗口的最大值(JS实现)

题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...

2020-02-24 18:12:11 314

原创 【JavaScript】Array类型的属性及方法汇总

1. 创建1.var arr = new Array();var arr = Array();//可省略newvar arr = Array(3);//创建一个包含三项的数组2. var arr = []2. 属性1.length:数组的项数保存在length属性中,它不是只读的,可以给它赋值3. 方法一、转化方法1.toString()方法:返回由数组中每个值的字符串形式拼...

2020-02-23 22:14:49 281

原创 【剑指offer】重建二叉树(JS实现)

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回(1)前序遍历:根左右(2)中序遍历:左根右(3)后序遍历:左右根可以根据前序+中序或者中序+后序确定一棵唯一的二叉树,但是前序+后序不能,因为只...

2020-02-23 18:37:17 171

原创 【剑指offer】按之字形顺序打印二叉树(JS实现)

题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。实现思路:广搜的思想,使用两个栈实现,奇数行:从左->右打印,在打印奇数行时,将其子节点按照先左后右的顺序添加到另一个栈中;偶数行:从右->左打印,在打印偶数行时,将其子节点按照先右后左的顺序添加到奇数栈中。/* functio...

2020-02-23 16:24:43 366

转载 【ES6】const>let>var

建议使用的优先级:const > let > varES6 提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。1.var、let、const的区别var 定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。let 定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。const 用来定义...

2020-02-23 16:01:15 160

原创 【剑指offer】二叉搜索树的第K个节点(JS实现)

题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。实现思路:二叉搜索树的中序遍历结果是有序的,使用中序遍历,每遍历一个节点,k-1,直到k减到1,即为第K小的节点function KthNode(pRoot, k){ if(!pRoot || !k){ return null;...

2020-02-22 14:44:35 312

原创 【剑指offer】数据流中的中位数

题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。let arr = []function Insert(num){ // write cod...

2020-02-22 13:26:32 77

原创 【剑指offer】二叉树的下一个节点(JS实现)

题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:1.利用next指针找出树的根节点2.将中序遍历的结果存储在数组中3.找出所求节点的下一个节点/*function TreeLinkNode(x){ this.val = x; this.left = null; ...

2020-02-22 12:52:06 185

原创 【剑指offer】链表中环的入口节点(JS实现)

题目:思路:借鉴大佬的思路function EntryNodeOfLoop(pHead){ // write code here //至少3个节点才能成环 if(!pHead || !pHead.next || !pHead.next.next){ return null } //分别定义快慢指针 let fast = pH...

2020-02-20 14:57:31 159

原创 【JavaScript】JS字符串转化为数组以及数组转化为字符串的方式

字符串转化为数组str.split(分隔符) eg:str.split(",");数组转化为字符串arr.join(连接符) eg:str.join(" ");

2020-02-19 20:50:51 290

原创 【剑指offer】表示数值的字符串(JS实现)

题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。function isNumeric(s){ // write code here var reg = /^[\+-]?\...

2020-02-19 20:43:04 148

原创 【剑指offer】字符流中第一个不重复的字符(JS实现)

题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路如下:标记字符流中字符出现的次数找出第一个出现次数为1的字符若使用数组,需要两个数组,分别标记字符出现的次数、字符的下标;而使用Map,可以一并解决这两个问题:...

2020-02-19 15:41:18 425

原创 块级元素、行内元素、可变元素及其区别

1 块级元素2 行内元素3.块级元素与行内元素的区别(1)块级元素会独占一行,其宽度自动填满其父元素宽度;行内元素不会独占一行,相邻的行内元素会排列在同一行,直至一行排不下才会换行,其宽度随元素的内容而变化。(2)块级元素可以包含行内元素和块级元素;行内元素不能包含块级元素。(3)行内元素设置width、height、margin-top、margin-bottom、padding...

2019-12-10 14:33:58 154

原创 回流(Reflow)与重绘(Repaint)

1. 回流与重绘1)回流:当我们对 DOM 的修改引发了 DOM 几何尺寸的变化(比如修改元素的宽、高或隐藏元素等)时,浏览器需要重新计算元素的几何属性(其他元素的几何属性和位置也会因此受到影响),然后再将计算的结果绘制出来。这个过程就是回流(也叫重排)。2)重绘:当我们对 DOM 的修改导致了样式的变化、却并未影响其几何属性(比如修改了颜色或背景色)时,浏览器不需重新计算元素的几何属...

2019-12-02 17:45:51 672

原创 Event Loop与异步更新策略

Vue 和 React 都实现了异步更新策略,虽然实现的方式不尽相同,但都达到了减少 DOM 操作、避免过度渲染的目的一. 前置知识:Event Loop 中的“渲染时机”1. Micro-Task 与 Macro-Task事件循环中的异步队列有两种:macro(宏任务)队列和 micro(微任务)队列。常见的 macro-task 比如: setTimeout、setInterva...

2019-12-02 17:17:36 163

原创 DOM 优化原理与基本实践---学习笔记

1. DOM 为什么这么慢因为收了“过路费”把 DOM 和 JavaScript 各自想象成一个岛屿,它们之间用收费桥梁连接。——《高性能 JavaScript》JS 引擎和渲染引擎(浏览器内核)是独立实现的。当我们用 JS 去操作 DOM 时,本质上是 JS 引擎和渲染引擎之间进行了“跨界交流”。这个“跨界交流”的实现并不简单,它依赖了桥接接口作为“桥梁”(如下图)。我们每操作一次...

2019-12-02 16:00:51 120

原创 浏览器的运行机制

1. 浏览器的内核浏览器内核可以分成两部分:渲染引擎(Layout Engine 或者 Rendering Engine)和 JS 引擎。早期渲染引擎和 JS 引擎并没有十分明确的区分,但随着 JS 引擎越来越独立,内核也成了渲染引擎的代称(下文将沿用这种叫法)。渲染引擎又包括了 HTML 解释器、CSS 解释器、布局、网络、存储、图形、音视频、图片解码器等等零部件。目前市面上常见的浏览器内...

2019-12-02 15:54:36 449

原创 图片优化

不同业务场景下的图片方案选型时下应用较为广泛的 Web 图片格式有 JPEG/JPG、PNG、WebP、Base64、SVG 等,这些格式都是很有故事的,值得我们好好研究一把。此外,老生常谈的雪碧图(CSS Sprites)至今也仍在一线的前端应用中发光发热,我们也会有所提及。前置知识:二进制位数与色彩的关系在计算机中,像素用二进制数来表示。不同的图片格式中像素与二进制位数之间的对应关系是不...

2019-12-01 20:00:36 1891

原创 前端性能优化分类

2019-12-01 17:27:39 120

原创 性能优化之本地存储 学习笔记

本地存储——从 Cookie 到 Web Storage、IndexDB随着移动网络的发展与演化,我们手机上现在除了有原生 App,还能跑“WebApp”——它即开即用,用完即走。一个优秀的 WebApp 甚至可以拥有和原生 App 媲美的功能和体验。故事的开始:从 Cookie 说起Cookie 的本职工作并非本地存储,而是“维持状态”。在 Web 开发的早期,人们亟需解决的一个问题就是...

2019-12-01 16:54:30 224 1

原创 浏览器的缓存机制 学习笔记

浏览器缓存机制Memory CacheService Worker CacheHTTP CachePush Cache1. HTTP缓存机制HTTP缓存分为强缓存和协商缓存强缓存强缓存是利用 http 头中的 Expires 和 Cache-Control 两个字段来控制的,强缓存中,当请求再次发出时,浏览器会根据其中的 expires 和 cache-control 判断...

2019-12-01 16:48:15 191

原创 DES加密算法js实现

DES 加密算法 1) 该函数接受一个 8 字节字符串作为普通 DES 算法的密钥(也就是 64 位,但是算法只使用 56 位),或者接受一个 24 字节字符串作为 3DES 2) 算法的密钥;第二个参数是要加密或解密的信息字符串;第三个布尔值参数用来说明信息是加密还是解密;接下来的可选参数 mode 如果是 0 表示 ECB 3)模式,1 表示 CBC 模式,默认是 ECB 模式;最...

2019-11-30 21:17:03 3639 4

原创 微信小程序des加密不支持btoa的解决方法

des加密时,使用btoa将一个字符串或者二进制数据编码成一个Base64字符串。提示btoa未定义解决方案:将btoa函数更换为base64_encode函数base64_encode的代码如下:function base64_encode(str) { var c1, c2, c3; var base64EncodeChars = "ABCDEFGHIJKLMNOPQRS...

2019-11-30 20:50:11 3542 3

原创 前端路由和后端路由

1 History API1.1 back()方法此异步方法转到会话历史记录中的上一页,与用户单击浏览器的“后退”按钮时的操作相同。等同于history.go(-1)。 调用此方法以返回会话历史记录的第一页之外不会产生任何效果,也不会引发异常。1.2 forward()此异步方法转到会话历史记录的下一页,与用户单击浏览器的“前进”按钮时的操作相同;这相当于history.go(1)。 调...

2019-11-14 22:41:56 167

原创 路由拦截

路由拦截很多页面是需要登录后才有权限访问的,所以需要在前端做路由拦截判断用户是否可以访问该页面。1 前端路由拦截实现思路:在自定义路由时添加一个自定义字段requireAuth,用于判断该用户是否已经登录成功登录的用户可以进行页面跳转,否则会重定向到登录页面vue实现前端路由拦截如下:const routes = [ { path: '/', name: 'In...

2019-11-14 21:48:46 1792

原创 函数防抖和节流

文章目录1 函数防抖(debounce)2 函数节流(throttle)3 两者异同点1 函数防抖(debounce)简单地说,就是当一个动作连续触发时,只执行最后一次应用场景:1)高频率的提交事件实现方式函数防抖在执行目标方法时,会等待一段时间。当又执行相同方法时,若前一个定时任务未执行完,则清除之前的定时器,重新设置定时器。function debounce(func, d...

2019-11-14 20:43:59 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除