leetcode_js刷题
一笑code
知识的真空地带产生不了新知
展开
-
js + leetcode刷题:No.2 两数相加、445 两数相加II
思路:基本上就是求和,注意进位,入链表一、2 两数相加题目:两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 =原创 2020-05-13 21:28:56 · 150 阅读 · 0 评论 -
js + leetcode刷题:No.79 单词搜索
思路:回溯算法 ,判断board[x][y]的上下左右是否有work[k+1],若有返回true题目:单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回原创 2020-05-13 21:10:02 · 283 阅读 · 0 评论 -
js + leetcode刷题:No.221 最大正方形
思路:用 dp(i,j) 表示以 (i,j) 为右下角,且只包含 1 的正方形的边长最大值。如果我们能计算出所有 dp(i,j) 的值,那么其中的最大值即为矩阵中只包含 1 的正方形的边长最大值,其平方即为最大正方形的面积。动态规划的关键在于,用dp表示什么,找到合适的状态。题目:最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4解法:/**原创 2020-05-13 21:03:03 · 230 阅读 · 0 评论 -
js + leetcode刷题:No.10 正则表达式匹配 & 44通配符匹配
思路:动态规划解决正则匹配问题;主要根据不同符号代表的含义带来的与上一个位置之间的false与true的影响。一、10 正则表达式匹配题目:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输原创 2020-05-13 20:55:40 · 320 阅读 · 1 评论 -
js + leetcode刷题:No.200 岛屿数量
思路:BFS && DFS备注:本文解法时间空间上在该题都没有优势,只是自己完全自己写出来的一次“BFS && DFS”;第一版还依然带着color的三种颜色,哈哈哈题目:岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,...原创 2020-04-20 22:13:20 · 443 阅读 · 0 评论 -
js + leetcode刷题:No.225、232、面试题03.04、面试题09 -- 队列与栈相互实现
基本结构:栈&队列目录:一、队列实现栈二、栈实现队列一、队列实现栈/** * Initialize your data structure here. */var MyStack = function() { this.queue = [];};/** * Push element x onto stack. * @param {number} x *...原创 2020-04-19 19:55:57 · 154 阅读 · 0 评论 -
js + leetcode刷题:No.155 最小栈 & 面试题03.02 & 面试题30. 包含min函数的栈
思路:辅助栈,存取一个当前最小值的栈最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.p...原创 2020-04-19 17:24:27 · 154 阅读 · 0 评论 -
js + leetcode刷题:No.135 分发糖果
思路:(1)正反两次循环,将最高位比较值确定(2)一次遍历,根据递增递减与连续递增减的个数之间的关系,进行求和计算;(第二种更省时省空间)题目:分发糖果老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样...原创 2020-04-19 16:41:14 · 422 阅读 · 0 评论 -
js + leetcode刷题:No.11 盛最多水的容器
思路: 1.暴力;2.根据“如果新边足够高的话,效果有可能大于宽度收缩带来的负效果”,所以向内收缩时,移动矮的一侧题目:盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不...原创 2020-04-18 10:18:57 · 151 阅读 · 0 评论 -
js + leetcode刷题:No.56 合并区间
思路:先排序,然后判断是否包容题目:合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,...原创 2020-04-16 16:15:15 · 388 阅读 · 0 评论 -
js + leetcode刷题:No.31 下一个排列
思路:从右向左查找,查找第一个左值小于右边的值;改位置处需要调整;然后处理;找不到,升序题目:下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23...原创 2020-04-09 17:18:03 · 159 阅读 · 0 评论 -
js + leetcode刷题:No.870 优势洗牌
标签:贪心算法;难度:中等思路:先排序+贪心给出满足条件最小,找不到直接给最小题目:优势洗牌给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。返回 A 的任意排列,使其相对于 B 的优势最大化。示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]...原创 2020-04-09 11:50:37 · 228 阅读 · 0 评论 -
js + leetcode刷题:No.22 括号生成
思路:按照可选填入括号,需要保证左括号小于等于右括号,才能有效此题的时间空间复杂度,着实不大会算了,晚些希望自己能够早点补上题目:括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]*/解法:/...原创 2020-04-09 10:30:37 · 273 阅读 · 0 评论 -
js + leetcode刷题:No.763 划分字母区间
标签:贪心算法;难度:中等思路:左起寻找第一个lastIndexOf,在该区间内找所包含的lastIndexOf,依情况延长题目:划分字母区间字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入: S = “ababcbacadefegdehijhklij”输出: [9,7,...原创 2020-04-09 10:26:49 · 178 阅读 · 0 评论 -
js + leetcode刷题:No.134 加油站
标签:贪心算法;难度:中等思路:改题中,拥有必须大于等于失去;当满足这个条件的时候,应该有一个满足条件的值;从开始循环,当遇到不能走向下一步的时候,说明初始走过来的值在后面,假设为下一个,向下循环在怎么找这个点的时候,费劲儿老半天;还是官方解答思路比较清晰题目:加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个...原创 2020-04-08 22:09:44 · 218 阅读 · 0 评论 -
js + leetcode刷题:面试题 01.07. 旋转矩阵
思路:可转圈替换,一层层,但奈何功力不够,写不出来;还可以发现规律,先上下对换,再主对角线对换题目:面试题 01.07. 旋转矩阵给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使...原创 2020-04-08 21:38:55 · 250 阅读 · 0 评论 -
js + leetcode刷题:面试题13. 机器人的运动范围
思路:表格,递推类,可以考虑BFS和DFS。根据下一个是否能走到依靠上一个左右位置,找出对应关系arr[i][j]=arr[i−1][j] || arr[i][j−1]此题思路参考官方解答题目:面试题13. 机器人的运动范围地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不...原创 2020-04-08 21:34:36 · 273 阅读 · 0 评论 -
js + leetcode刷题:No.55,54 跳跃游戏两题一文
标签:贪心算法;难度:中等、困难;思路:55:贪多步之间能够到达的最远位置,当改位置大于等于最后一个下标时,即可跳跃;45:倒序循环数组;初始,当前位置锁定最后一个,贪最远满足条件到达当前位置的下标(这个下标要从最远位置开始循环,保证最远),计数1;当当前位置为0时,循环结束;count即为最终值55 跳跃游戏:题目:跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数...原创 2020-04-06 17:53:59 · 201 阅读 · 0 评论 -
js + leetcode刷题:No.44 通配符匹配
标签:动态规划、回溯算法、贪心算法;难度:困难;回溯算法暂未了解,目前先不做说明;改题解法采用动态规划。思路:p[i] 为‘?’,或与当前对比s字母相等,dp[i][j] = dp[i-1][j-1]为‘*’,时,dp[i][j] = dp[i][j-1] || dp[i-1][j];另外,dp[0][0] = true,剩下的默认为false;且p[i-1]为‘*’,则之后的均可保持匹...原创 2020-04-06 15:14:33 · 271 阅读 · 0 评论 -
js + leetcode刷题:No.72 编辑距离
标签:;难度:困难;思路:参考官方思路:https://leetcode-cn.com/problems/edit-distance/solution/bian-ji-ju-chi-by-leetcode-solution/题目:编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插...原创 2020-04-06 15:06:34 · 197 阅读 · 0 评论 -
js + leetcode刷题:No.5376 非递增顺序的最小子序列
标签:贪心算法;难度:简单思路:根据题目,先排序,方便拿出满足条件的最大的子序列;后面的和大于前面的和题目:非递增顺序的最小子序列给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的...原创 2020-04-06 00:18:18 · 192 阅读 · 0 评论 -
js + leetcode刷题:No.1221 分割平衡字符串
标签:贪心算法、字符串;难度:简单思路:该题贪的是最大数量,那么就是一旦满足组成平衡字符串,那么就计数题目:分割平衡字符串在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。示例 1:输入:s = “RLRRLLRLRL”输出:4解释:s 可以分割为 “RL”...原创 2020-04-05 23:45:32 · 165 阅读 · 0 评论 -
js + leetcode刷题:No.1217 玩筹码
标签:贪心算法、数组;难度:简单思路:chips中的元素即位置;且移动两位不消耗,移动一位消耗;间隔两位的是奇数与奇数,偶数与偶数;所以最终是比较奇偶的个数最小值总觉得在做“脑筋急转弯”,差点转不过来;题目:玩筹码数轴上放置了一些筹码,每个筹码的位置存在数组 chips 当中。你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):将第 i 个筹码向左或者右移动 ...原创 2020-04-05 22:23:27 · 232 阅读 · 0 评论 -
js + leetcode刷题:No.1046 最后一块石头的重量
标签:贪心算法;难度:简单思路:先排序,找最大两个,比较,有差则将差按照二分查找方式放进数组(这样理论上快一点)。所以在一定程度上,觉得这个题目考的是数据插入(二分插入)不过,哇哈哈哈,一个splice没有控制好位置,搞了我两个小时啊。插入应该从小于target的点加1个位置插进去;找个时间把数组的十大排序理一理题目:最后一块石头的重量有一堆石头,每块石头的重量都是正整数。每一回合,...原创 2020-04-05 21:58:50 · 219 阅读 · 0 评论 -
js + leetcode刷题:No.1029 两地调度
标签:贪心算法;难度:简单思路:考虑是否能取到两者最合适的第一个,主要考虑是差值最大的肯定要优先取最小的。因此将按照差值排序,前N个最小的去A,后N个去B题目:两地调度公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。示例:输入:[[10...原创 2020-04-05 18:34:16 · 194 阅读 · 0 评论 -
js + leetcode刷题:No.1005 K 次取反后最大化的数组和
标签:贪心算法;难度:简单贪的是每次逆转为最小值,得到最大值的总和。思路:先排序,然后先逆转最大的负数,没有负数则逆转较小的正数,直至次数用尽题目:K 次取反后最大化的数组和给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的...原创 2020-04-05 17:41:50 · 237 阅读 · 0 评论 -
js + leetcode刷题:No.944 删列造序
标签:贪心算法;难度:简单;贪的是每列中任何两个相连元素降序相连,则改列计数题目:删列造序给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。删除 操作的定义是:选出一组要删掉的列,删去 A 中对应列中的所有字符,形式上,第 n 列为 [A[0][n], A[1][n], …, A[A.length-1][n]])。比如,有 A = [“abcdef”, “uvwxyz...原创 2020-04-05 17:01:36 · 132 阅读 · 0 评论 -
js + leetcode刷题:No.874 模拟行走机器人
该题标签:贪心算法;难度:简单;根据题意,贪的是每个方向最长能走的路。其实也是根据题意,写出的代码思路:先set存储障碍点,以防重复。然后每个指令进行一次转向或行走判断是否到达障碍点的判断。关于方向,根据顺时针方向定义。其中,最大欧式距离的平方 不等于 最终位置的欧式距离,而是过程中所有的欧式距离的最大值补充:欧式距离即直线距离,曼哈顿距离即为到达方式的距离(多个);切比雪夫距离(Cheby...原创 2020-04-05 16:37:04 · 246 阅读 · 0 评论 -
js + leetcode刷题:No.460 LFU缓存
思路:利用双hash,一个存储当前缓存内容,一个存储被访问次数对应的key概念拓展:常见的缓存算法LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高。LFU (Least frequently used) 最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。FIFO (Fist ...原创 2020-04-05 13:50:17 · 166 阅读 · 0 评论 -
js + leetcode刷题:No.860 柠檬水找零
思路:贪心算法 贪的是每次手里留下的都是更小额零钱便于找零,也就是说尽可能把大的钞票给出去。因为找零,不需要计算挣多少钱,所以只需要明白两个变量5,10是否够找题目:柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找...原创 2020-04-04 22:13:49 · 151 阅读 · 0 评论 -
js + leetcode刷题:No.42 接雨水
改题采取最基本的思路,依照题目直接思考。目前不具备“栈”等思考,不便参考思路:根据每个点,找出左右的高点(也需要包含自身去比较),根据高点最小值 - 当前点长度得出可积水单位,叠加题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个...原创 2020-04-04 21:24:01 · 227 阅读 · 1 评论 -
js + leetcode刷题:面试题62. 圆圈中最后剩下的数字
思路:这类数据很多的处理,一定要先去寻找前后相互之间的关系,并确定边界情况,这样就会好处理很多。比如本题,可推导出公式:f(n) = (m+f(n-1))% m;当n变为1即长度为1时结束,f(n)代表n时最终删除的那个数值题目:面试题62. 圆圈中最后剩下的数字0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0...原创 2020-03-30 10:40:54 · 231 阅读 · 0 评论 -
js + leetcode刷题:No.1162 地图分析
思路:所有初始陆地格子,作为0层的节点;BFS遍历四个方向节点;当遍历结束时,当前遍历层数就是最远距离该题目的标签为“图”、“广度优先搜索(BFS)”,图的BFS 需要使用队列,代码框架是这样子的(伪代码):while queue 非空: node = queue.pop() for node 的所有相邻结点 m: if m 未访问过: que...原创 2020-03-29 11:58:52 · 174 阅读 · 0 评论 -
js + leetcode刷题:No.820 单词的压缩编码
1、按单词长度排序,索引后缀;拼接字符串计算长度2、set清除重复字符串,作为后缀;然后对每个单词截取后面的部分进行判断set是否包含,包含则证明set该元素是该单词的词尾。最后计算长度(不过计算长度对set的处理有转为数组和直接遍历,直接遍历要更快一点,少了转数组的一层运算)题目:单词的压缩编码给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果...原创 2020-03-28 01:30:21 · 568 阅读 · 0 评论 -
js + leetcode刷题:No.1033 移动石子直到连续
(1)正常排序,无夹缝,为0(2)a与b或b与c之间小于等于2,有一个夹缝,最小为1,最大为c-2-a (2为b的一个位置,两差之间有个1不能移动)(3)差值大于2,夹缝多余2,直接各挪一遍。最小为2,最大为c-2-a题目:移动石子直到连续三枚石子放置在数轴上,位置分别为 a,b,c。每一回合,我们假设这三枚石子当前分别位于位置 x, y, z 且 x < y < z。...原创 2020-03-27 21:06:20 · 146 阅读 · 0 评论 -
js + leetcode刷题:No.292 Nim 游戏
脑筋急转弯 – 找规律每4.8.12… 4的倍数都是输题目:Nim 游戏你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头...原创 2020-03-27 19:17:58 · 244 阅读 · 0 评论 -
js + leetcode刷题:No.914 卡牌分组
思路:计数;求最大公约数,与2比较题目:卡牌分组给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2]...原创 2020-03-27 16:36:33 · 191 阅读 · 0 评论 -
js + leetcode刷题:买卖股票的最佳时机系列六题一文No.121、122、123、188、309、714
这是我头一次学会从关联题目里面,慢慢做一系列相关的题目。也是第一次学会系列文可以帮助你进行一个整体思考,而不是每道题都绞尽脑汁的按照题目的要求完成符合条件的代码,而无延展性。题目:本文题目只进行简单描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。注意:你不能在买入股票前卖出股票。1. 121 只完成一笔交易2. 122 尽可能多完成交易3. 123 最多完成...原创 2020-03-26 12:42:30 · 212 阅读 · 0 评论 -
js + leetcode刷题:No.999 车的可用捕获量
方向数组,系统一点的思路题目:在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格...原创 2020-03-26 11:04:08 · 259 阅读 · 0 评论 -
js + leetcode刷题:No.892 三维形体的表面积
思路:求表面积,要总面积减去重复的面积*2;但是这种方式不是很适用于遍历计算,更直接方便的方式是按照每个格计算所展示出的表面积,也就是说:上下表面积 + 4x四个周围的面积 - 四周与别的位置重复的面积(重复的为相交最矮的那个)。然后每个叠加即可题目:三维形体的表面积在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 ...原创 2020-03-25 10:04:11 · 126 阅读 · 0 评论