自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 【LeetCode练习】62. 不同路径(中等|JS|动态规划)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路动态规划分四步走:确定子问题:机器人在第[i][j]的位置都是从[i-1][j]或者[i][j-1]位置走过来的。0确定初始状态:f[0][0] = 1。0确定边界状态:当i=0或j=0,只有一种方式走过去,此时f[i][j]=1转移方程:f[i][j]=f[i-1][j]+f[i]f[j-1]计算顺序:从第0行计算到第m-1行111111112345671361

2020-12-29 20:07:41 227

原创 【LeetCode练习】322. 零钱兑换(中等|JS|动态规划)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路首先是分治的思想,将大问题转化为小的问题,而在这个过程中,如果用递归,则会产生大量的重复运算,时间复杂度很高。因此用动态规划的思想,找出每一个问题的最优子结构,然后在计算最终问题的时候得出来的也就是最优结构了。总而言之,动态规划就是为了解决小问题被重复计算得问题。举个例子:又1,2,5面值的硬币,组合出5的面值。首先来看看下图:dp[i]数组用来保存到达第i个值所需要的硬币数量,可以看到如果用普通的递归,会重复计算很多的

2020-12-29 19:11:04 318

原创 【JavaScript笔记04】JS原型

目录原型1. [[Prototype]]2.“类”2.1 “构造”2.2 "继承"2.3 "反射"原型1. [[Prototype]]JS中的对象有一个特殊的[[Prototype]]内置属性,实际上就是对于其他对象的引用,var myObject = { a:2}console.log(myObject.a) //打印2对于默认的[[Get]]操作来说,如果无法再对象本身找到需要的属性,就会继续访问对象的[[Prototype]]链。var anotherObject = {

2020-12-23 21:09:30 165

原创 【LeetCode每日一练】48. 旋转图像(中等|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路将数组沿副对角线交换,然后遍历将其反转。三、代码实现方法1:var rotate = function(matrix) { const l = matrix.length for(let i=0;i<l;i++){ for(let j=i;j<l;j++){ [matrix[i][j],matrix[j][i]] = [matrix[j][i],matri

2020-12-19 18:09:06 135 1

原创 【LeetCode每日一练】1688. 比赛中的配对次数(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路题目已经说了方法了。有n个队伍,只有1个冠军,也就是要淘汰n-1个队伍,每场比赛淘汰一个队伍,需要进行n-1场比赛,所以。。。(不讲武德法)三、代码实现方法1:var numberOfMatches = function(n) { let res = 0 while(n!=1){ if(n%2 == 0){ n = n/2 res += n

2020-12-18 19:46:14 172 1

原创 【JavaScript笔记03】JS的对象

这里写目录标题1.对象1.1 类型1.2 对象拷贝1.3 属性描述符1.4 Getter和Setter1.5 存在性1.6 遍历2.混合对象“类”2.1 显式混入2.2 隐式混入2.3 小结1.对象1.1 类型六种语言类型:stringnumberbooleannullundefinedobject但前五种本身并不是对象。内置对象:StringNumberBooleanObjectFunctionArrayDateRegExpError可以当作构造函数来用,

2020-12-17 21:41:53 343

原创 剑指 Offer 56 - II. 数组中数字出现的次数 II(中等|JS|Map)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路遍历每个元素,用map记录出现的次数,达到3次时将其从map中删除,最后剩下的就是只出现一次的数字,将其展开成数组后取出来。三、代码实现var singleNumber = function(nums) { let m = new Map() for(let num of nums){ if(m.has(num)){ let temp = m.get(num) + 1

2020-12-17 16:38:59 111

原创 【LeetCode每日一练】1614. 括号的最大嵌套深度(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路用一个变量A记录连续遇到左括号数,并将其作为深度用变量B记录下来,每当遇到右括号时候,将A变量减一,而变量B依然保持为最大值。三、代码实现var maxDepth = function(s) { let l=0,count=0 for(let i=0;i<s.length;i++){ if(s[i]=='('){ l++ } else if(s[i]

2020-12-16 18:38:40 494

原创 【LeetCode每日一练】1290. 二进制链表转整数(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路二进制每增加一位,当前十进制就翻倍,在加上增加的那一位的十进制数。先把head取出来转为字符串,再用parseInt()将二进制解析为十进制整数。三、代码实现方法1:var getDecimalValue = function(head) { let node = head let res = 0 while(node){ res = res*2+node.val

2020-12-15 16:16:17 120

原创 【LeetCode每日一练】49. 字母异位词分组(中等|JS|质数的运用)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路使用哈希,对每一个词的字母排序,然后用ES6的map结构存储,然后再取出来合成结果。质数法:利用质数的特性,质数不同,乘积不同;质数相同,乘积相同,这里字符顺序不同,但如果把每个字母对应一个质数,那么只要它们乘积相同,那么就是字母异位词。这样的话就可以少一个sort的时间复杂度。三、代码实现方法1:var groupAnagrams = function(strs) { const len = strs.leng

2020-12-14 20:33:45 101

原创 【LeetCode每日一练】217. 存在重复元素(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路这题非常简单(其实是想摸一下鱼 ),使用哈希,Javascript自带Set数据结构。三、代码实现var containsDuplicate = function(nums) { return new Set(nums).size != nums.length};...

2020-12-13 21:29:28 75

原创 【JavaScrip笔记02】this的那些事

文章目录1.关于this对this的一些误解2.this全面解析绑定规则优先级this词法1.关于this对this的一些误解误解一:把this理解成指向函数自身function foo(num){ console.log('foo:' + num) this.count++}foo.count = 0var ifor(i=0;i<10;i++){ if(i>5){ foo(i) }}console.log(foo.co

2020-12-13 10:00:35 82

原创 【LeetCode每日一练】1313. 解压缩编码列表(简单|JS|快慢指针)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路循环一次,根据nums[i]和nums[i+1]创建新的数组,再把这个数组concat到结果数组中,但leetcode上提交这个代码会显示内部错误???!(已发现问题,文末说明)快慢指针:其实和第一种思路其实差不多,但为什么这个就能提交???!三、代码实现方法1:var decompressRLElist = function(nums) { const len = nums.length let res

2020-12-12 21:57:18 95

原创 【LeetCode每日一练】513. 找树左下角的值(中等|JS|层序遍历)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路层序遍历:要注意的是往临时数组push节点的顺序很重要,因为我们用while循环来实现层序遍历,所以必定是最后一次循环才输出这个值,因此先往临时数组插入右子树根节点,再插入左子树根节点,然后再从数组第一个位置取出来往下继续循环,这样每次都是从右往左判断,最后一个自然就是底层的最左节点了。三、代码实现var findBottomLeftValue = function(root) { let list = [] l

2020-12-11 14:23:29 200

原创 【LeetCode每日一练】1672. 最富有客户的资产总量(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路简单题,这题的作用就是让我知道了reduce这个api应该怎么用~reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。三、代码实现var maximumWealth = function(accounts) { const len = accounts.length const sum = (total,num) => { return

2020-12-10 16:19:06 235 1

原创 【JavaScript笔记01】作用域和闭包

目录1.作用域查找类型异常2.词法作用域欺骗词法3.函数作用域和块作用域隐藏内部实现规避冲突块作用域let4.提升5.作用域闭包循环和闭包模块1.作用域引擎 - 负责整个JS程序的编译以及执行过程。编译器 - 负责语法分析及代码生成。作用域 - 负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套严格的规则,确定当前执行的代码对这些标识符的访问权限。所以,作用域就是更具名称查找变量的一套规则。查找类型LHS查询:查找的目的是对变量进行赋值。RHS查询:目的是获取变量的值。

2020-12-10 13:39:32 194

原创 【LeetCode每日一练】46. 全排列(中等|JS|回溯算法)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路前天才做过Ⅱ,鬼知道为什么我先做Ⅱ再做Ⅰ。。。好吧反正就是回溯算法,比Ⅱ要简单因为没有重复的数,还有就是判断一个数有没有用过最好不要用includes判断,会增加时间复杂度,新建一个数组判断就好。三、代码实现var permute = function(nums) { const res = [] const len = nums.length const used = new Array(len).fi

2020-12-09 18:30:42 164

原创 【LeetCode每日一练】204. 计数质数(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路枚举优化:单纯的枚举是不行的,会超时,但是仔细观察可以发现我们只要枚举到对应数字的开方就可以了,以Math.sqrt()为界,只要前面的数字能被整除,那么这个数字就不是质数。埃氏筛:一个比较巧妙的方法,假如一个数是质数,那么他的倍数都是合数,利用此特性,我们可以先额外创建一个数组对每个数进行标记,初始化都为质数,从2开始将每一个数的倍数的数所在标记设置为false,下次再遇到标记为false的数就可以不进行此处的循环了,借用一位

2020-12-08 10:14:03 140

原创 【LeetCode每日一练】47. 全排列 II(中等|JS|回溯算法)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路对于这种使用回溯法的题目,我们都可以先画一个解集树看看:根据题目条件,可以得知其约束条件如下:不能产生重复的排列,从上面的图可以看出,要避免重复排列要做到两点:树的同一路径上不选择索引相同的数字,因为这个数字已经被用过了。比如:在一个排列中,如果第一次选择了第一个1,那么第二次就不能再选择第一个1,只能选择第二个1。树的同一层不能选择相同的数字,即使它们的索引是不同的。比如:对于[1,1,2],如果第一个排列以第一个1开

2020-12-07 10:59:43 187

原创 【LeetCode每日一练】22. 括号生成(中等|JS|回溯算法)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路又是一道运用回溯法的题目,首先看题目,要生成n对有效括号,那么就意味着有n个左括号和n个有括号,同时添加规则是:当左括号还有的时候,可以继续往字符串添加。当右括号比左括号的剩余数量多的时候,才可以往字符串添加,否则非法。当字符串长度为2n时,停止添加画个图看看:因此,回溯法有三个要点(摘自力扣某位大佬的解释):选择每次的选择最多有两个,要么选左括号,要么右括号,“选择”会展开出一棵解的空间树。用 DFS

2020-12-06 10:29:58 329

原创 【LeetCode每日一练】118. 杨辉三角(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路根据杨辉三角的特性,即第 n 行的第 i 个数等于第 n-1 行的第 i-1个数和第 i 个数之和。三、代码实现var generate = function(numRows) { const res = [] for(let i=0;i<numRows;i++){ const arr = new Array(i+1).fill(1) for(let j=1;j<arr.length-1;j+

2020-12-06 09:50:46 146 2

原创 【LeetCode每日一练】1572. 矩阵对角线元素的和(简单JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路注意避免对角线中间的数字重复相加就行。三、代码实现var diagonalSum = function(mat) { const len = mat.length res = 0 for(let i=0;i<len;i++){ res += mat[i][i] mat[i][i]=0 res+=mat[i][len-i-1] } return res};...

2020-12-05 20:41:50 226

原创 【LeetCode每日一练】78. 子集(中等|JS|回溯算法)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路经典的递归回溯思想的题目,先贴两张图,第一张,我们只看每个元素,都有两种选择,选入子集和不选入子集,那么我们就可以考察当前的数,在选择它的基础上继续选下去,或者在不选择它的基础上(开辟另一个分支),继续选下去。那么就用指针index代表当前递归考察的数字,当index超出数组长度(越界了),那么表示所有数字都考察完毕,把当前子集加入解集res,结束当前递归的分支。当然这里还需要回溯,在结束当前递归后,撤销当前选择的数字,回到选择前

2020-12-04 14:39:04 346 1

原创 【LeetCode每日一练】1342. 将数字变成 0 的操作次数(简单|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路太简单的题目,不想再优化了。三、代码实现var numberOfSteps = function(num) { let count = 0 while(num!=0){ if(num%2==0){ num = num / 2 }else{ num-- } count++ } return count};...

2020-12-04 09:42:23 226

原创 【LeetCode每日一练】34. 在排序数组中查找元素的第一个和最后一个位置(中等|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路将原数组copy一份,反向排序,用indexOf找出原数组第一个target的位置和新数组第一个target的位置,对新数组target位置做一些处理后直接push到结果中。二分查找法:先找出target所在位置,将left和high都设置为target的位置,然后在往两边找,找到第一个值不等于target为止。三、代码实现1.API侠var searchRange = function(nums, target) {

2020-12-03 12:58:23 153

原创 【LeetCode每日一练】1395. 统计作战单位数(中等|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路取中间点,看左边比它小右边比它大或左边比它大右边比它小的数字个数,最后做排列组合。三、代码实现var numTeams = function(rating) { const len = rating.length let count = 0 for(var i=0;i<len;i++){ let lmin=0,rmax=0,lmax=0,rmin = 0 for(let j=0;j<i;j

2020-12-02 10:45:33 119 5

原创 【LeetCode每日一练】剑指 Offer 64. 求1+2+…+n(中等|JS)

文章目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路由于不能用乘除法,因此首先想到递归,但递归一般使用if语句来作为递归的出口,这里不能用if这些关键字,那么可以利用逻辑运算符。&&逻辑运算符的规则是当左边为False,则停止执行,若左边为True,则继续执行右边。这样一来这题就很简单了,一句搞定,这个居然是中等难度的题目。三、代码实现var sumNums = function(n) { return n && (n+sumNum

2020-12-02 09:39:33 117

原创 【LeetCode每日一练】1365. 有多少小于当前数字的数字(简单|JS)

目录一、题目描述二、解题思路三、代码实现一、题目描述二、解题思路两种方法:直接两个循环暴力求解空间换时间的思想,因为nums最多为100,所以用一个数组记录一个数字出现的频率,最后再遍历这个数组三、代码实现方法1var smallerNumbersThanCurrent = function(nums) {var res = []for (var i=0;i<nums.length;i++){ var count=0 for(var j=0;j<nums

2020-12-01 16:03:28 143

空空如也

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

TA关注的人

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