自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 矩阵中的路径 深度优先

剑指 Offer 12. 矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[["a","b","c","e"],["s","f","c","s"],["a","d","e","e"]]但矩阵中不包含字符串“abfb”的路径,因为字

2020-08-26 11:41:01 229

原创 浏览器预加载 prefetch & preload 标签

https://www.cnblogs.com/xiaohuochai/p/9183874.htmlpreload 是告诉浏览器页面必定需要的资源,浏览器一定会加载这些资源prefetch 是告诉浏览器页面可能需要的资源,浏览器不一定会加载这些资源

2020-08-23 23:03:03 543

原创 iframe sameorigin 跨域问题

代码解决方法:解决方法:在静态资源请求返回header头中设置X-Frame-Options 属性:deny表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。sameorigin表示该页面可以在相同域名页面的 frame 中展示。allow-fromuri表示该页面可以在指定来源的 frame 中展示...

2020-08-23 15:01:50 6024

原创 零钱兑换 动态规划

零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。解题思路,其实这一个一维的动态规划, 总结金额 从0 增加到amout;1. 对总金额 i,兑换方式可以是:从中任意取出一个硬币后,剩下金额的对方方式+1; 因为是任意的,取出的币值就是coins中的元素。 因此计算最少方式,就是取各种币值后,计算各种情况下(剩下金额的对方方式+1) 的最小值;dp[i] = Mi...

2020-08-19 01:02:45 379

原创 二维动态规划,硬币

面试题 08.11. 硬币硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007);解题思路:二维动态规划,画矩阵。1. 行维:币种从1到4(按币值排序后逐渐增加), 列维:面值逐渐增加从0到n; 0 1 2 3 4 5 ... i-1 i n 1 (+1分) 1 1 1 1 1...

2020-08-18 23:07:20 167

原创 柯里化

1. 纯函数2. 抽象函数3. 延迟执行经典题: currying + 隐士转换https://www.jianshu.com/p/2975c25e4d71// 实现一个add方法,使计算结果能够满足如下预期:add(1)(2)(3) = 6;add(1, 2, 3)(4) = 10;add(1)(2)(3)(4)(5) = 15;function add() { // 第一次执行时,定义一个数组专门用来存储所有的参数 var _args = ...

2020-08-11 10:45:01 94

原创 剑指 Offer 45. 把数组排成最小的数

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。解题思路:1. 特殊的排序算法,x + “” +y < y+ "" +x时, x < y;2. 排序算法有很多种,挑一种使用;1. 选择排序:/** * @param {number[]} nums * @return {string} */var minNumber = function(nums) { const searchMinIn...

2020-08-09 18:22:39 152

原创 矩阵螺旋输出

剑指 Offer 29. 顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。1. 用行增量和列增量决定下一步方向2. 到达边界时,换方向;同时缩小边界条件;3. 当左右边界,上下边界重合时了,完成全部遍历;/** * @param {number[][]} matrix * @return {number[]} */var spiralOrder = function(matrix) { if(matrix.length ===0) re.

2020-08-09 16:52:13 237

原创 剑指 Offer 47. 礼物的最大价值

剑指 Offer 47. 礼物的最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?解题思路:1. 从第一个点到最后一个点依次计算每个格子 的最大值;2. 每个格子的最大值 为 上面一个点或者下面一个点的最大值与当前点的和;3. 注意边界条件: 第一行和第一列;/** * @p.

2020-08-09 14:54:08 114

原创 剑指 Offer 63. 股票的最大利润

剑指 Offer 63. 股票的最大利润假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?解题思路:最小值点进,当天大于最小值,则可卖可赚钱;1. 第i天能否卖? 前i-1天最小值 小于第i天时,能卖,可赚钱,记录赚钱为最大利润;2. 第i天是否进? 如果前i-1天最小值 大于当天时,可进,则当天为前i天最小值点;/** * @param {number[]} prices * @return {number} */va...

2020-08-09 14:07:33 110

原创 剑指 Offer 42. 连续子数组的最大和

剑指 Offer 42. 连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。解题思路:1. 暴力法,快慢指针,慢指针记录起点,快指针逐渐往后移动,同期记录最大值; 时间复杂度O(n^2)2. 动态规划,分而治之;当只有两个数时,包含第2个数的最大子数组,要么是这个数组本身或者最后一个数自己;i个数的数组,包含第i个数的最大子数组值为Dp[i] = max(Dp[i-1]+nums[i], nums[...

2020-08-09 13:47:35 103 1

原创 剑指 Offer 07. 重建二叉树

https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/submissions/输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。解题思路:1. 前序遍历的第一个节点是根节点;2.前序遍历的第一个节点在中序遍历中的位置,确定该根节点的左子树节点个数 和子树个数;3. 通过左子树个数和右子树个数,可以从前序遍历中切割出左子树的前序遍历和右边子树的前序遍历;..

2020-08-08 15:56:32 102

原创 146. LRU缓存机制

146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间...

2020-08-06 15:44:05 101

原创 双指针问题

双指针中,快慢指针问题:1. 指针一快一慢,快指针按序遍历数组,慢指针记录有效数据位置。2. 当快指针找到有效数据时,慢指针才往前走一步;移除元素给你一个整数数组arr。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中1的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组/** * @param {number[]} nums * @param {number} val * @return {number}...

2020-08-02 15:24:07 281

原创 5476. 找出数组游戏的赢家

https://leetcode-cn.com/problems/find-the-winner-of-an-array-game/给你一个由 不同 整数组成的整数数组 arr 和一个整数 k 。每回合游戏都在数组的前两个元素(即 arr[0] 和 arr[1] )之间进行。比较 arr[0] 与 arr[1] 的大小,较大的整数将会取得这一回合的胜利并保留在位置 0 ,较小的整数移至数组的末尾。当一个整数赢得 k 个连续回合时,游戏结束,该整数就是比赛的 赢家 。返回赢得比赛的整数。题目数

2020-08-02 13:32:30 211

原创 词典中最长的单词

https://leetcode-cn.com/problems/longest-word-in-dictionary/给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。解答:1. 先建立字典树,字典树建立时,同一个父节点下,根据字母的assic 码判断子节点字母先后顺序。2. js 字符使用charCodeAt() 获取字符as.

2020-08-01 23:07:21 294

原创 CSS实现最小宽度的正方形

题目,实现正方形容器,容器宽度随页面变化而变化,且最小宽度为500px;和“如何让子容器的高度等于父容器的宽度的一半” 一样,可分别利用 padding 的白分比特性和viewPort的vw 单位实现;题目两要求:正方形,最小宽度<!DOCTYPE html><html lang="en"><head> <meta charset...

2020-03-31 23:47:47 327

原创 react 性能提升

使用React框架时,可以从两方面提高应用的性能:减少不必要的Render函数的调用。 复用Dom减少不必要的Render函数的调用在React的生命周期里有四种方式可以触发一个组件render函数的调用,分别是:1. 组件初始挂载时2. props 更新时3. 调用 setState()4. 调用forceUpdate()这四种方式中,初始挂载的调用是必不可少的,...

2019-11-04 01:01:29 312 1

原创 apply 和call 函数的实现

apply 和call 函数的特性:第一个参数改变this 指向 第一个参数为null时,默认this指向window apply 函数, 原函数参数以数组形式作为第二个参数; call函数, 原函数参数从第二个参数开始,依次罗列; 原函数有返回值时,apply 和 call 函数也要返回。apply 和call 函数的实现要用到:this的执行上下文属性 eval 函...

2019-11-03 01:23:39 181

原创 bind 函数的实现

实现bind函数之前,首先了解bind函数的特性:预置参数; 改变原函数的this指向; 返回一个函数; 返回函数的返回值类型与原函数一致,即原函数有返回值,bind后的函数也要有返回值; 返回的函数可以作为构造函数,且保留原函数的原型链;实现前4个特性很简单:Function.prototype.newBind = function (target) { const ...

2019-11-02 22:19:20 1620

原创 如何让子容器的高度等于父容器的宽度的一半

如下:有A容器和B容器,A容器宽度和高度已知,使用CSS满足如下条件:B容器高度是A容器宽度的一半 B容器左右离A容器都是10px B容器在A中上下居中 B容器内部文字水平垂直居中这里面水平垂直居中不难实现,在上篇CSS 居中对齐中已经介绍,但是B容器高度为A容器width的一半如何实现呢?可以用到margin 和 padding的一个特性:百分比。 margin 和...

2019-11-02 20:27:59 4945 1

原创 Promise.all 的实现

Promise.all 的特性:返回也是一个promise; 返回参数也是数组,与输入一一对应; 只要有一个promise失败,立刻报错返回,不再等待其他;Promise.prototype.all = function(promiseList){ const result = []; const count =0; // 返回一个promise return new ...

2019-10-29 23:08:23 278

原创 CSS 居中对齐

<div class="container"> <div class="content"></div><div>// flex,在容器元素上设置.container{ height: 300px;// display: flex; justify-content: center; align...

2019-10-20 16:09:49 263 1

原创 React 的调和算法(Diffing 算法)

目录算法策略单节点diffing数组节点diffingkey值的使用要求算法策略React的调和算法,主要发生在render阶段,调和算法并不是一个特定的算法函数,而是指在调和过程中,为提高构建workInProcess树的性能,以及Dom树更新的性能,而采用的一种策略,又称diffing算法。 在React 的官网上描述“Diffing” 算法时,提到了“diffing ...

2019-10-18 00:02:00 2406

原创 React的调和过程(Reconciliation)

目录什么是Reconciliation调和的目的触发调和过程的方式调和过程涉及的数据结构ReactElementFibe 节点两棵Fibe Node树两棵树的创建时间两棵树关联Instance & Fibe & DOM 关联线性任务链effect list调和过程Render阶段(renderRoot)递归流程Com...

2019-10-17 23:54:24 3672 1

原创 React 解决 “cross-cutting concerns” 问题

在React 官方文档中描述render prop 时,是为了解决横切关注问题“cross-cutting concerns”。“cross-cutting concerns”指的是两个非常不一样的组件存在一些类似的功能。对于“cross-cutting concerns” 问题,React 给出了三种解决方案来复用类似功能:1)Minxs:解决部分method类似问题,但是已被弃用,ES6 ...

2019-09-11 00:33:31 1542

原创 babel-runtime VS babel-polyfill

随着ES标准的发展,相继出现了ES6,ES7,ES8,ES9等新特性。新特性的出现,可以很好的提高开发效率和开发者体验,受到前端开发者的喜爱。但是浏览器厂商对这些新特性的支持是存在时差的,各主流浏览器的支持程度也参差不齐了,同时用户端安装的浏览器版本也不可控。为保障产品的可运行性,同时兼顾开发者的体验,babel应运而生。 babel承担了将ES6+新特性转译为浏览器能识别的向后兼容的JS语法的职...

2019-08-02 10:37:18 505

原创 解码方法

题目:https://leetcode-cn.com/problems/decode-ways/一条包含字母A-Z的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。这道题一开始想到的是回溯算法,但是执行到239题时超时。回溯算法思路:从左往右,穷举所有可能的组合...

2019-05-28 01:05:30 3381

原创 计算各个位数不同的数字个数

题目:https://leetcode-cn.com/problems/count-numbers-with-unique-digits/submissions/给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n。1. 首先想到的是暴力版本:从0开始遍历到 10**n,判断每个数字的每一位是否被重复,没有则计数+1;显然这种方法遇到大量数据时...

2019-04-25 23:28:54 1192

原创 增加和搜索单词

题目:https://leetcode-cn.com/problems/add-and-search-word-data-structure-design/思路:1. add 时采用回溯建立前缀树,在单词的最后一个字符增加完时,标记节点isWord=true;2. search是采用回溯遍历前缀树3. search时遇到“.” 字符,遍历所有子节点,直到找到。4.search ...

2019-04-22 00:08:17 128

原创 复原IP地址

题目:从字符串复原可能的IP地址。分析: IP地址的特点IP地址具有如下特点:由32个二进制位表示,每8位二进制数为一个整数,中间由小数点间隔,整个IP地址空间有4组8位二进制数,如“255.255.11.135”。也就是说,IP地址的每组数最大为2^8 -1,即255,最小为0.采用回溯算法,从左往右分割字符串,穷举所有可能的 4组组合。每个节点的解空间为:从剩余的字符串取有效的...

2019-04-18 00:22:14 297

原创 格雷编码序列

定义:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。格雷编码转二进制:G(i) = i ^ (i / 2) = i ^ (i >> 1)n 位数的格雷数最大值为:(1 << n ) -1;因此求一个n 位的格雷编码序列,即将G(0) 到 G((1 << n ) -1) 逐一转二进制数:/** * @...

2019-04-14 23:51:08 1762

原创 784. 字母大小写全排列 & 17. 电话号码的字母组合

题目:给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。看题目这是一个回溯算法题,但是本文并没有采用回溯算法,而是使用了空间换时间的思路。开辟一个矩阵,存储每一位可能的值。然后从前往后集合组装。/** * @param {string} S * @return {string[]} */var letter...

2019-04-10 00:15:26 249

原创 webpack 打包的输出和引入方式

       最近在迁移项目时,需要将外部依赖的组件库打包后使用。期望是每个组件打包成一个文件入口,放在工程目录下的lib 文件夹下。配置了webpack 的 entry 为数组,output 的filename,path,publicPath 和 chuckFilename属性。 作为迁移项目的依赖,将组件库项目以git  tag 的方式引入项目,代码中使用ES6 import 的方式使用lib...

2018-12-05 16:30:42 2146

原创 页面可视宽高

最近项目中要做一个缩略图放大显示功能,放大的图片由用户上传,宽高没有限制。视觉要求是:按原尺寸显示图片,图片右上角放一个关闭图标;图片若是溢出可视区,按原宽高比缩小到可视区域。 实现时涉及到了可视区域大小的获取,查询接口,发现有很多个表示页面‘width’和‘height’ 的属性。下面以Height 为例,Width 与之对称。1) window对象有innerHeight和outerHe...

2018-07-27 18:12:55 1421

翻译 AJAX

新接触的项目中使用的Fetch技术发送网络请求,本来想对比一下传统的XHR与fetch 的区别。但是翻阅他人博客时,发现AJAX和XHR的关系不明,有博客认为XHR和fetch都是实现AJAX请求的方法,也有博客直接认为XHR就是AJAX。本人比较偏向第一种说法,因为AJAX并不是一个可以独立工作的技术,他更像是一种技术方案。一种为了解决在不刷新或重定向页面的前提下,实现与服务端的数据交互和客户端...

2018-07-27 01:18:14 147

原创 parseInt, parseFloat, Number 函数对比

Javascript 中提供了三种函数,将变量转化成数字类型。parseInt 和 parseFloat 用来解析以数字开头的部分数字字符串;1) parseInt(arg1, arg2), 只能用于将字符串转换成10进制的整数,第二个参数指定转换基数,即第一个参数的原始进制;第二个参数不存在时,parseInt 只能识别,0x 开头的16进制数和0开头的8进制数, 其他都按10进制转10...

2018-07-27 00:22:34 567

转载 polyfill

在查资料时,常常看到polyfill 这个词,不知道其对应的中文术语。查看解释,感觉他就是用来向下兼容浏览器的适配器。以下有一段关于他的解释:“在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现 一个polyfill就是一个用在浏览器API...

2018-07-25 20:58:46 4344

原创 mouseleave 和 mouseout , mouseenter 和 mouseover,mouseover 和mousemove

mouseenter 和 mouseleave 是一对事件,分别指鼠标移入和离开当前元素, 这两个事件不冒泡;mouseover 和 mouseout 是一对事件,指鼠标移入和离开元素,但是这个两个事件是冒泡,也就是说,鼠标移入或离开当前元素的子元素时,事件会冒泡到当前元素,当前元素的事件会被触发。mousemove 是 鼠标在元素上移动时触发,具有冒泡性质。鼠标在元素内部移动时也会触发该...

2018-07-19 01:10:29 939

原创 onWheel 和 onScroll 区别

onwheel 事件在鼠标滚轮在元素上下滚动时触发。同样可以在触摸板上滚动或放大缩小区域时触发(如笔记本上的触摸板)。onscroll 事件在元素滚动条在滚动时触发。滚动条必须存在,否则不会触发。无论以那种方式,只要滚动条滚动,事件都会触发。触发方式:鼠标滚轮,鼠标拖动,键盘上下键,或者设置的滚动函数,如 scrollTo,scrollBy,scrollByLines, scrollByPag...

2018-07-19 00:11:30 5904

空空如也

空空如也

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

TA关注的人

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