自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 杂记

行内元素之间的文本节点会造成空隙,可以通过加注释节点或者父元素font-size: 0;来解决。浏览器渲染主要分以下几个步骤,计算样式->计算布局->绘制->组合层,transform和animation处于组合层这一步骤,而left或margin处于计算布局这一步骤,所以transform会更快,这也是常说的硬件加速。...

2020-05-14 22:30:31 146

原创 git相关操作

git add . —— 将所有暂存区的文件全部提到工作区git commit -m ‘这里是提交描述’ —— 将暂存区的内容提交历史记录区git branch —— 查看目前的所有分支git checkout 分支名 —— 切换分支git checkout -b 分支名 —— 创建并切换分支git checkout commitId 文件路径 —— 将文件路径指向的文件退回或者...

2020-05-06 21:55:23 131

原创 从上往下打印出二叉树的每个节点,同层节点从左至右打印

//从上往下打印出二叉树的每个节点,同层节点从左至右打印 function print(){ var params = [] //添加终止条件 var index = Array.from(arguments).findIndex(item=>item!==null) if(index === -1) return...

2020-04-19 18:58:10 178

原创 判断链表有环

//如何判断链表有环? function Node(ele){ this.element = ele this.next = null } //首先创建带环链表 var lian = { head: null } //添加结点 function append(lian, el...

2020-04-18 16:28:31 106

原创 去重合并两个链表

在这里插入代码function ListNode(value){ this.value = value this.next = null } //去重合并两个链表 function merge(l1,l2){ var l = new ListNode(0) var current = l.head l1 = l1....

2020-03-22 14:27:02 443

原创 判断数组中是否有和为n的子串,优化时间复杂度

var arr=[2,1,3,4,5,6] function find(arr,n){ var temp=0; for(var i=0;i<arr.length;i++){ temp+=arr[i] if(temp===n){ return true }else if(temp&...

2020-03-22 11:43:15 335

原创 二叉树找到和为n的所有路径

//本题中的路径指的是从根结点到叶节点 var tree={ root:1, rchild:{ root:2, rchild:null, lchild:{ root:1, rchild:null, lchild:null,...

2020-03-22 10:34:47 1047

原创 最长无重复子串的长度

//最长无重复子串 var str = '123345665434543212' function find(str){ var arr=[] var max=0 for(var i=0;i<str.length;i++){ if(arr.includes(str[i])){ if(arr.le...

2020-03-21 12:07:01 431 1

原创 实现降维方法flat

//实现flat:Array.prototype.flat(num),根据num降维 var arr = [1, 2, 3, [5, [6]]]; Array.prototype._flat = function(num) { var arr = this; if (num !== 0) { var result =...

2020-03-20 16:07:09 299

原创 Mac下安装并启动mongodb

1、下载链接:mongo下载官网2、下载结束后将其解压到任意文件夹,本文假设为Users/local/Documents/mongo3、在mongo下添加两个文件夹data和log,在data中添加文件夹db4、回到mongo下,进入bin目录,创建mongodb.conf5、通过vim mongodb.conf命令进入mongodb.conf写入如下内容port=27017dbpat...

2020-03-16 08:33:37 1529

原创 洗牌算法

算法基本思路:共54张牌,得到0-53中的任意随机数,假设得到的随机数是3,将索引为3的元素与第53个元素交换位置,再得到0-52中的任意随机数,操作如上,直到范围为0-0 //洗牌算法 //生成数组 var arr=[] for(var i=0;i<10;i++){ arr.push(i) } //进行排列 ...

2020-03-13 13:58:40 117

原创 将原生Ajax包装成promise

let ajaxPromise = new Promise(resolve, reject){ let xhr = new XMLHttpRequest(); // 创建XMLHttpRequest对象 xhr.open(method , url, async); //创建请求 //method:请求方法 'GET'/'POST' //url: 请求路径 //async:规定异步(t...

2020-03-11 17:52:44 315

原创 react与vue的区别

技术选型:react如果应用体积小,且要求速度快,考虑vue(vue更轻量)如果要构建一个大型应用程序,考虑React (react更复杂,但是技术和生态圈更成熟)如果要构建一个同时适用于Web端和原生App的框架,考虑React (react兼容移动端)优缺点对比:react优点:专注于view 视图; 社区活跃; React 支持 IE8;缺点:并不是一个完整的框架,只是一...

2020-03-11 15:47:26 311

原创 节流与防抖

防抖:将一段时间内的连续操作合为一个操作,在上一次的操作未结束之前无法进行下一次的操作,通过减少函数执行的频率来提高性能,如:scroll事件就可以采用防抖function debounce(fn, wait){ var time = null return function(){ var that = this var arg = arguments if(!time){ ...

2020-03-11 15:28:39 73

原创 css动画实现翻转硬币

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>test</title> <style> .father { width:100px; height:100px; ...

2020-03-11 14:10:32 648

原创 proxy实现数组双向绑定

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>test</title> <style> </style></head><body><ul>&...

2020-02-28 12:18:46 2247 2

原创 以O(n)复杂度求最大子列和

function maxSum(arr) { var thisSum = maxSum = 0; for (var i = 0; i < arr.length; i++) { thisSum += arr[i]; if (thisSum > maxSum) maxSum = thisSum; ...

2019-10-09 10:06:37 85

原创 剑指offer(十七):手动实现bind函数

Function.prototype.bind = function(o, ...rest) { var self = this; var tempFn = function() {}; //tempFn是一个中转构造函数,位于调用完bind后生成的函数的原型链上, //如果调用bind的函数是构造函数那么函数内部的this指向new...

2019-10-03 16:05:08 143

原创 剑指offer(十六):找到数组中和为sum乘积最小的数值对

题目描述给定一个数组,找出数组中两个和为sum且在所有和为sum的数值对中乘积最小的数值对。分析将数组从小到大排序,定义两个指针,一个指向数组头i,一个指向数组尾j,当arr[i]+arr[j]>sum,将j指针向左移动,arr[i]+arr[j]<sum,将i指针向右移动。function sum(arr, s) { arr.sort((a, b) =>...

2019-09-29 14:03:26 137

原创 剑指offer(十五):字典序全排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。分析字典序算法解析:最小字典序是数组从小到大的排序,最大字典序是最小字典序的倒序。找到下一个字典序的步骤如下:1)定义一个指针指向数组的最后一个数,从右向左找到第一个小于自己的右侧相邻元素的元素ai,以ai...

2019-09-29 13:38:37 352

原创 剑指offer(十四):把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析通过数组的sort方法,如果a+b>b+a,a排在b的前面,否则,b排在a的前面。 function sort(arr) { arr.sort(function(a, b) { ...

2019-09-28 23:43:28 47

原创 剑指offer(十四):数组中出现次数超过一半

题目描述数组中有一个数字出现的次数超过数组长度的一半。请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析使用对象属性存储数组元素的出现次数 function find(arr) { var obj = {}; arr.forEach((i...

2019-09-28 23:12:23 58

原创 剑指offer(十三):查找链表中倒数第k个节点

题目描述已给一个链表,找到这个链表的倒数第k个结点分析使两个指针指向链表头部,先让第一个指针走k-1步,第二个指针不动,当第一个指针指向k-1时,第一个指针和第二个指针同时向前走,直到第一个指针指向链表尾部,因为两个指针始终相差k-1步,所以此时第二个指针指向的是倒数第k个结点//得到链表的倒数第k个节点 var l = { count: 4, he...

2019-09-28 21:37:16 138

原创 剑指offer(十二):镜像二叉树

题目描述判断两棵树是否是镜像二叉树 function mirror(t1, t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; if (t1.root == t2.root) ...

2019-09-25 20:40:50 53

原创 剑指offer(十一):调整数组顺序

问题描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析定义两个暂存数组,一个存放奇数,一个存放偶数,然后拼接两个数组。 function turn(arr) { var odd = []; var even = [...

2019-09-24 22:11:15 96

原创 剑指offer(十):二维数组的查找

题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析从二维数组的左下角开始找,如果大于,则向右找;如果小于,则向左找。 function find(arr, num) { var temp = arr[0][arr[0].length - 1...

2019-09-23 16:32:05 50

原创 剑指offer(九):替换空格

题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。function replace(str) { str = str.replace(/\s/g, '%20'); return str; }...

2019-09-23 15:59:30 63

原创 剑指offer(八):用栈实现队列

题目描述用栈来实现队列,完成队列的Push和Pop操作。分析栈:先进后出(类似于数组中的pop),队列:先进先出(类似于数组中的shift)var line=[]; function push(a){ line.push(a); } function pop(){ line.shift(); }...

2019-09-23 15:41:23 60

原创 剑指offer(七):根据数组最小值旋转数组

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析首先找到该数组的最小值,以最小值将数组分割成左右两个小数组,请将左小数组连接到右小数组上 var a...

2019-09-23 15:28:34 73

原创 剑指offer(六):斐波那契数列

题目描述定义一个函数,输入n,输出斐波那契数列第n项的数值//斐波那契 function fei(n) { if (n == 1) return 0; if (n == 2) return 1; return fei(n - 1) + fei(n - 2); }...

2019-09-23 15:18:24 59

原创 剑指offer(五):从头到尾打印一个链表

题目描述从头到尾打印一个链表 //定义一个链表 var lian = { count: 3, head: { value: 1, next: { value: 2, next: { value: 3,...

2019-09-23 15:13:40 58

原创 剑指offer(四):变态青蛙跳

问题描述一只青蛙一次可以跳1阶,2阶。。。n阶,问青蛙要跳上n级台阶,有多少种方法?分析如果青蛙跳1阶,那么还有f(n-1)种跳法;如果跳2阶,还有f(n-2)种;。。。如果跳n阶,还有f(0)种。所有f(n)=f(n-1)+f(n-2)+…f(0)function answer(n) { if (n == 0) return 0; if (n ==...

2019-09-23 15:03:32 57

原创 剑指offer(三):矩形覆盖

题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析使用小矩形覆盖大矩形,无非有两种方式,横着或竖着,如果第一步选择竖着,那么已经覆盖了1个格子,还有n-1个;如果第一步选择横着,那么还有n-2个; function answer(n) { if (n == 1) ...

2019-09-23 14:51:12 65

原创 剑指offer(二):统计二进制中的1的个数

题目描述统计某个整数的二进制中的个数;分析先将某个整数转化为二进制,再统计二进制中的个数。 //将十进制数转化为二进制数组 function Binary(n) { var arr = []; while (n != 0) { arr.unshift(n % 2); n = Math.floor(n /...

2019-09-23 14:37:04 99

原创 剑指offer(一):重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:前序遍历的顺序是根左右,中序遍历的顺序是左右根,所以前序遍历数组的1就是二叉树的根,找到根之后将中序遍历数组分割成左子树[4,7,2]和右子树...

2019-09-23 09:20:54 72

原创 数据属性和访问器属性

ES5中定义了两种属性,分别是数据属性和访问器属性。1、数据属性:数据属性的四个特性分别是它的值(value)、可写性(writable)、可枚举性(enumerable)和可配置性(configurable)。value:包含这个属性的数据值。writable:是否可以修改属性的值。enumerable:能否通过for in循环或者Object.keys()枚举到属性。...

2019-08-31 21:15:10 1463 1

原创 关于let与块级作用域的一些理解

for(let i=0;i<3;i++){ setTimeout(function(){ console.log(i); //依次输出1,2,3 },100);}首先明确函数的相关作用域链是在函数声明是确定且保存的,这一点无关函数是在哪里调用的,如何调用的,也就是说,当定义一个函数时,实际上是保存了一个作用域链。let关键字声明...

2019-08-31 10:49:59 2201 2

原创 实现bind()函数

//用代码实现bind函数var obj = new Object();function fn(a, b) {console.log(this);console.log(a + b);}Function.prototype.mybind = function(thisArg) {var that = this; //暂存实例函数var arr = Array.from(argume...

2019-08-31 10:36:06 403

原创 JS中关于this指向的问题

每个函数被调用是都会生成特殊对象this,this指向函数被调用的环境。JS中有三种函数:方法:this指向调用该方法的对象构造函数:this指向通过new常见的新对象普通函数:this总是指向全局注意:在事件处理程序中,事件绑定在哪个元素上,this就指向谁。任意函数里如果嵌套了函数,那么内部函数的this在未指定的情况下,应指向的都是window(严格模式下返回undefi...

2019-08-31 10:16:09 82

原创 对于JS中原型与原型链的理解

首先明确,JS中所有的引用类型都是对象,即函数也是对象。那么,引用类型和基本类型有什么区别呢?基本类型存储出在栈内存中的,栈内存中的内容都是已知大小或是有范围上限的,而引用类型同时存储于栈内存与堆内存中,栈内存中存储变量标识符和指向堆内存中该对象的指针。堆内存中的内容大多是大小未知的。栈内存中内容不可变,堆内存中内容可变。上述明确后,便可以将对象分为两类函数对象、普通对象。所有对象都是...

2019-08-31 09:52:07 285 1

空空如也

空空如也

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

TA关注的人

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