![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode(js)每天一道题
leetcode(js)每天一道题
坚持就是胜利!
啵雨的博客
要学习的还有很多!!
展开
-
leetcode(js)-每日一练之 有效的字母异味词 题库编号242
leetcode(js)-每日一练之 有效的字母异味词主要思路:如果两个字符串的长度不一致,则返回fasle创建一个map,用来存储每个字符出现的次数对于第一个单词的每个字母,也就是s1[ i ],在map里将出现次数+1.对于第二个单词的每个字母,也就是s2[ i ],在map里将出现次数-1遍历完成后,检查map里的每一个字母的出现次数是不是0,如果有一个非0的字母,则返回false,否则返回true/** * @param {string} s * @param {string}原创 2020-06-04 20:23:20 · 136 阅读 · 0 评论 -
leetcode(js)-每日一练之 除自身以外数组的乘积 题库编号238
leetcode(js)-每日一练之 除自身以外数组的乘积进阶写法:var productExceptSelf = function(nums) { const result= new Array(nums.length).fill(1); let produce = 1; //先从最左边遍历循环,求出每个数左边所有数的乘积和 for(let i =0 ;i<nums.length;i++) { result[i] =result[i]原创 2020-06-03 10:26:18 · 147 阅读 · 0 评论 -
leetcode(js)-每日一练之 存在重复元素 题库编号217 219
leetcode(js)-每日一练之 存在重复元素I IIvar containsDuplicate = function(nums) { const set = new Set(); for(let i =0;i<nums.length;i++) { if(set.has(nums[i])) { return true } set.add(nums[i]);原创 2020-05-27 23:09:58 · 133 阅读 · 0 评论 -
leetcode(js)-每日一练之 岛屿数量 题库编号200
leetcode(js)-每日一练之 岛屿数量主要思路:先遍历二维数组,遇到数字为1,计数器count++然后用‘沉没’(dfs深度优先搜索)的方式把其周围的1换成0,并把其周围的1周围的1换成0,直到周围都是0,停止var numIslands = function(grid) { let count = 0; function dfs(row,col) { if(row<0||row>=grid.length||col<0||col原创 2020-05-26 16:28:25 · 204 阅读 · 0 评论 -
leetcode(js)-每日一练之 打家劫舍 题库编号198
leetcode(js)-每日一练之 打家劫舍又是一道动态规划的题用memo[i]储存i角标的位置偷窃的最大值var rob = function(nums) { if(nums.length===0) { return 0; }; if(nums.length===1) { return nums[0] }; const memo = []; memo[0] = nums[0]; memo[1]原创 2020-05-26 00:02:32 · 149 阅读 · 0 评论 -
leetcode(js)-每日一练之 寻找旋转排序数组中的最小值 题库编号153
leetcode(js)-每日一练之 寻找旋转排序数组中的最小值主要思路:主要运用二分法如果数组长度为1,返回唯一的一个数定义两个指针,第一个left指向数组开头,第二个right指向数组结尾检查数组是否被翻转,如果没有,则返回数组里的第一个数当left小于right时,取中间值作为mid进行二分搜索,如果mid的左边一个数大于mid,则返回mid,或者mid的右边一个数小于mid,则返回mid+1否则的话,如果left所在的数小于mid,则将left右移至mid+1位置(砍掉左半边)否原创 2020-05-23 17:45:32 · 123 阅读 · 0 评论 -
leetcode(js)-每日一练之 乘积最大子数组 题库编号152
leetcode(js)-每日一练之 乘积最大子数组这道题部分思路跟最大子序和这道题类似,刚开始做的时候,我觉得先把最大子序和的加号变成乘号试试var maxProduct = function(nums) { let memo = []; memo[0] = nums[0]; let max = nums[0]; for (let i = 1; i < nums.length; i++) {原创 2020-05-22 16:33:24 · 172 阅读 · 0 评论 -
leetcode(js)-每日一练之 加油站 题库编号134
leetcode(js)-每日一练之 加油站首先看到这道题的第一思路是,从0号加油站出发,按0-1-2-3-4-0的方向行驶,若中间没油了,则说明从0号加油站出发这种方案是不可行的,我们再改用从1号加油站出发的方案,。。。。。。一个一个试,直到某号加油站可以循环一周,我们最终的答案就是这号加油站,但是这样做有点暴力,不是最优解。接下来说一下比较完美的解法把,空间复杂度o(n),开始跟暴力解法相同,从0号加油站出发,向前走,直到行不通,接下来的做法与暴力解法不同了!!!注意!!!,行不通之后,原创 2020-05-21 12:00:50 · 179 阅读 · 0 评论 -
leetcode(js)-每日一练之 验证回文串Ⅱ 题库编号680
leetcode(js)-每日一练之 验证回文串Ⅱ主要思路:首先跟题库编号125 验证回文字符串的思路相同在left(++)和right(–)指针行进过程中,若比较后发现不同,给一次机会,把left++与right 比较 或 right-- 与left 比较,如果有一个返回true,则次字符串珍惜了这次机会,是一个回文字符串,否则仍不是回文字符串为什么不left-- right++呢 ,因为在每次比较 都要确定左右两边的字符数相同,才符合题意 var validPalindro原创 2020-05-20 15:00:18 · 132 阅读 · 0 评论 -
leetcode(js)-每日一练之 验证回文串 题库编号125
leetcode(js)-每日一练之 验证回文串一.格式化 + 双指针夹逼:格式化:去除非字母,非数字,并都改成小写 var isPalindrome = function(s) { let k; k = s.toLowerCase().replace(/[\W]/g, ''); if (k.length < 2) { return true; }原创 2020-05-19 14:52:43 · 154 阅读 · 0 评论 -
leetcode(js)-每日一练之 买卖股票的最大利润 题库编号 121
leetcode(js)-每日一练之 买卖股票的最大利润主要思路:1.注意股票的买卖方式:卖出点在卖入点的后面2.找每个点在左半区域的最低点,计算每个点所能获得的最大利润3.找其中的最大值,就是股票的最大利润 var maxProfit = function(prices) { if (prices.length == 0) { return 0; } let minPoint原创 2020-05-18 16:23:28 · 273 阅读 · 0 评论 -
leetcode(js)-每日一练之 矩阵置零 题库编号 73
leetcode(js)-每日一练之 矩阵置零1.检查并标记第一行和第一列是否有0(firstColHasZero和firstRowHasZero)2.忽略第一行第一列,若其余行列含有0,将其所在的行列的最左边和最上面置为0(在第一行第一列上)3.接下来,利用第一行和第一列的标0情况,将matrix的数字标04.最后,处理第一行和第一列如果firstColHasZero 等于true,将第一列全设为0如果firstRowHasZero等于false ,将第一行全设为0var setZer原创 2020-05-17 21:40:34 · 140 阅读 · 0 评论 -
leetcode(js)-每日一练之 反转链表 题库编号 206 反转字符串 344
leetcode(js)-每日一练之 反转链表和反转字符串(一)反转链表:1.迭代:开始让 null 作为上一节点,从头结点开始,顺着链表,让当前节点的 next 指针指向上一节点,直到走到链表尾。整个链表就反向了。图解 var reverseList = function(head) { let prev = null; let curr = head; while (curr) {原创 2020-05-16 18:26:47 · 122 阅读 · 0 评论 -
leetcode(js)-每日一练之 爬楼梯 题库编号70
leetcode(js)-每日一练之 爬楼梯这也是一道经典的(一维)动态规划的问题:一维动态规划的思路是:原创 2020-05-16 15:06:13 · 125 阅读 · 0 评论 -
leetcode(js)-每日一练之 数组中重复的数据 题库编号442
leetcode(js)-每日一练之 数组中重复的数据主要思路:因为不能使用额外空间存储哈希表(散列表),所以只能对数组本身做操作。题目提到元素的范围是 1 到 n,并且元素只可能出现 1 次或者 2 次。因此这里可以使用符号来标记元素是否出现过。下标为 i 的元素的符号,代表着值为 i + 1 的元素是否出现过,负号是出现过,正号是没出现过// [4,3,2,7,8,2,3,1]// 当i = 1时,此时n=3,把nums[3-1] *= -1 变成负数,结果 [4,3,-2,7,8,2,3,原创 2020-05-13 15:26:39 · 155 阅读 · 0 评论 -
leetcode(js)-每日一练之 只出现一次的数字 题库编号136
leetcode(js)-每日一练之 只出现一次的数字第一种写法: 利用下标var singleNumber = function(nums) { for (let i = 0; i < nums.length; i++) { if (nums.lastIndexOf(nums[i]) == nums.indexOf(nums[i])) return nums[i]; }};第二种写法:利用mapvar singleNumber =原创 2020-05-14 21:41:09 · 129 阅读 · 0 评论 -
leetcode(js)-每日一练之 加一 题库编号66
leetcode(js)-每日一练之 加一这题较为简单:但是要考虑到 有一位或多个位有9的情况,和所有位都是9的情况 var plusOne = function(digits) { for (let i = digits.length - 1; i >= 0; i--) { if (digits[i] != 9) { digits[i]++; re原创 2020-05-13 14:51:23 · 140 阅读 · 0 评论 -
leetcode(js)-每日一练之 不同路径 题库编号62
leetcode(js)-每日一练之 不同路径首先这是一道动态规划的题目:主要思路:①.如何计算其中某一个格子a到达它自身的路径有多少条:由于只可以向右或向下走所以,假设格子a的上面格子为格子b 左边格子为格子c 能到达格子b 和 格子c的总条数和,即为可到达格子a的总条数 ,依此类推.②.本题为二维动态规划数组:一般都把第一行和第一列手动填充,然后用第一行和第一列的值,来求其他位置的值(若为一维动态规划数组,则先手动求出前两个值,然后用这两个值求后面的值) var u原创 2020-05-12 15:32:16 · 153 阅读 · 0 评论 -
leetcode(js)-每日一练之 合并区间 题库编号56
leetcode(js)-每日一练之 合并区间主要思路:1.将数组中的区间按照起始位置排序2.用curr数组记录当前合并的最大区间,遍历数组中的每一个区间,如果当前区间的起始位置小于等于curr的终点位置,则可以继续合并,合并并更新curr的起始和终止位置。如果当前区间的起始位置大于curr的终止位置,则无法合并。所以将curr加入到result里,并用当前的区间替换curr的值。3.返回result var merge = function(intervals) {原创 2020-05-11 01:22:49 · 143 阅读 · 0 评论 -
leetcode(js)-每日一练之 跳跃游戏 题库编号55
leetcode(js)-每日一练之 跳跃游戏一.贪心算法(最简单):代码如下: var canJump = function(nums) { let maxJump = nums.length - 1; for (let i = nums.length - 2; i >= 0; i--) { if (i + nums[i] >= maxJump) { m原创 2020-05-09 16:00:57 · 215 阅读 · 0 评论 -
leetcode(js)-每日一练之 螺旋矩阵 题库编号54
leetcode(js)-每日一练之 螺旋矩阵解题思路:1.如果数组为空,返回空数组2.定义4个边界以及当前方向3.当左边界小于等于右边界,且上边界小于等于下边界时,执行while循环;按照右下左上的顺序,依次将路径上的字符添加到结果里。4.while循环结束后,返回结果(插一个小知识点:在多维数组中数组名.length指示数组的行数。数组名[行下标] .length指示该行中的...原创 2020-05-08 12:05:22 · 187 阅读 · 0 评论 -
leetcode(js)-每日一练之 最大子序和 题库编号53
leetcode(js)-每日一练之 最大子序和原创 2020-05-07 09:57:53 · 146 阅读 · 0 评论 -
leetcode(js)-每日一练之 子母异位词分组 题库编号49
leetcode(js)-每日一练之 子母异位词分组原创 2020-05-06 16:12:09 · 141 阅读 · 0 评论 -
leetcode(js)-每日一练之 合并两个有序链表 题库编号21
leetcode(js)-每日一练之 合并两个有序链表这属于一个关于链表的入门题:按照我下述代码画图一步一步来就能理解,前提是理解链表的基本特性和概念,本题只用了单向链表,如果想详细理解链表知识,我转载一个链接,大家可以去看看链表基础知识 var mergeTwoLists = function(l1, l2) { let curr = new ListNode()...原创 2020-05-02 16:08:16 · 125 阅读 · 0 评论 -
leetcode(js)-每日一练之 有效的括号 题库编号20
leetcode(js)-每日一练之 有效的括号原创 2020-05-01 15:37:29 · 166 阅读 · 0 评论 -
leetcode(js)-每日一练之 三数之和 Three sum 题库编号15
leetcode(js)-每日一练之 三数之和 Three sum做题思路:1.给数组排序2.遍历数组,从0遍历到length-23.如果当前的数字等于前一个数字,则跳过这个数4.如果数字不同,则设置start = i+1 ,end = length - 1;查看i, start,和end三个数的和比零大还是小:①.如果比0大,start++②.如果比0小,end–如果等于0,...原创 2020-04-30 11:20:04 · 218 阅读 · 0 评论 -
leetcode(js)-每日一练之 最长回文字符串-题库编号5
leetcode(js)-每日一练之 最长回文字符串原创 2020-04-29 14:15:10 · 266 阅读 · 0 评论 -
leetcode(js)-每日一练之 无重复字符的最长字符串 题库编号3
leetcode(js)-每日一练 无重复字符的最长字符串在做这道题之前补充一个知识点:es6新增的set一基本概念:1.是一种新增的数据结构,类似于数组,但是里面值是唯一的需要注意,可以利用值唯一性进行去重,但是要看数据类型,数据类型相同的才会进行去重2.使用方法:new Set()eg:let arr = [1,2,3,2,3];let set1 = new Set(arr)...原创 2020-04-28 01:49:23 · 160 阅读 · 0 评论 -
leetcode(js)-每日一练之 Two sum 题库编号1
leetcode(js)-每日一练之 Two sum再求解之前我们讲一下ES6 新增的map什么是map呢?1.是一种新的数据结构,对象的集合2.map的作用:在ES6之前,对象的key只能是字符串eg:let obj={ a:123, //正确写法 [1,2,3]:123 //错误写法}而在map中,key可以是任意的内容3.map的使用:1...原创 2020-04-27 01:21:50 · 155 阅读 · 0 评论