- 博客(83)
- 问答 (2)
- 收藏
- 关注
原创 一起学习LeetCode热题100道(73/100)
1.1.弹出栈顶元素:只要栈不为空且当前柱子的高度小于栈顶索引对应的柱子高度,就不断弹出栈顶索引。对于每个弹出的栈顶索引top,我们可以计算以heights[top]为高的矩形的宽度,这个宽度是当前索引i(或数组末尾添加的0的索引)与栈中新的栈顶索引之间的距离减1(因为我们要排除新的栈顶索引对应的柱子)。1.当遍历完整个heights数组后,栈中可能还剩余一些索引,这些索引对应的柱子右边没有比它们矮的柱子(但由于我们在数组末尾添加了一个高度为0的柱子,所以这些索引现在都能被处理)。
2024-09-06 10:46:18
393
原创 一起学习LeetCode热题100道(72/100)
2.1.在循环内部,我们检查栈是否不为空,并且当前温度temperatures[i]是否大于栈顶索引对应的温度temperatures[stack[stack.length - 1]]。2.2.如果栈不为空且当前温度大于栈顶温度,那么说明我们找到了栈顶索引对应的温度之后第一个更高的温度,即temperatures[i]。输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]输出: [1,1,0]
2024-09-06 10:39:37
517
原创 一起学习LeetCode热题100道(71/100)
然后,我们将currentString(即当前编码块内的字符串)重复times次,并将结果附加到str的末尾(注意,由于我们是从内向外解析的,所以需要将currentString附加到str的前面,但因为我们是在构建currentString,所以实际上是将其加到str重复后的字符串之后)。1.stack:一个空数组,用于存储临时对象,每个对象包含两个属性:str(当前括号块之前的字符串)和times(该字符串应该被重复的次数)。输入:s = “2[abc]3[cd]ef”输出:“accaccacc”
2024-09-06 10:33:45
895
原创 一起学习LeetCode热题100道(70/100)
1.在JavaScript中,每个函数都有一个特殊的属性prototype,它是一个对象,用于为通过该函数创建的实例提供共享的方法和属性。当我们尝试访问一个实例的某个属性或方法时,如果该实例本身没有这个属性或方法,JavaScript引擎就会沿着原型链向上查找,直到找到该属性或方法或到达原型链的顶端(Object.prototype)。2.在上述代码中,我们为MinStack.prototype添加了四个方法:push、pop、top和getMin。
2024-09-04 10:31:24
1071
原创 一起学习LeetCode热题100道(69/100)
2.1.2.检查栈顶元素:如果栈不为空,我们取出栈顶元素(即最近压入的左括号),并检查它是否与当前的右括号匹配(通过 map 映射)。2.1.2.2如果不匹配,说明当前的右括号没有对应的左括号,或者顺序不正确(例如,] 出现在 ( 之后),因此字符串无效。1.1.如果字符是 ‘(’、‘[’ 或 ‘{’ 之一,那么它是一个左括号。2.1.1.检查栈是否为空:如果栈为空,说明没有左括号可以与当前的右括号匹配,因此字符串无效。1.如果栈为空,说明所有的左括号都找到了匹配的右括号,并且顺序正确,因此字符串有效。
2024-09-04 10:24:03
587
原创 Cannot read properties of undefined (reading ‘_android’)
vue3 + ts 使用qrcodejs2插件生成二维码报错Cannot read properties of undefined (reading ‘_android’)替换qrcodejs2 使用qrcodejs2-fix1.卸载 npm uninstall qrcodejs22.安装 npm i qrcodejs2-fix使用与qrcodejs2 使用方法一致
2024-09-03 17:19:10
523
原创 一起学习LeetCode热题100道(68/100)
2.通过比较nums1[i-1]和nums2[j],以及nums1[i]和nums2[j-1](如果存在的话),来确定i是否需要向左或向右移动。4.如果nums1[i-1] > nums2[j],说明i选大了,应该向左移动(即减小i),所以更新right = i - 1。3.如果nums2[j-1] > nums1[i],说明i选小了,应该向右移动(即增大i),所以更新left = i + 1。1.检查i和j是否合法(即i不为0时nums1[i-1]存在,j不为n时nums2[j-1]存在)。
2024-09-03 10:27:30
873
原创 【无标题】一起学习LeetCode热题100道(67/100)
1.如果nums[mid] > nums[right],则更新left = mid + 1。解释:原数组为 [0,1,2,4,5,6,7] ,旋转 3 次得到输入数组。解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。1.设置两个指针left和right,分别指向数组的开头和末尾。输入:nums = [4,5,6,7,0,1,2]输入:nums = [11,13,15,17]输入:nums = [3,4,5,1,2]
2024-09-03 10:19:01
613
原创 一起学习LeetCode热题100道(66/100)
1.1.如果 target 在左半部分的范围内(即 nums[left] <= target < nums[mid]),则更新 right = mid - 1 以在左半部分继续搜索。2.1.如果 target 在右半部分的范围内(即 nums[mid] < target <= nums[right]),则更新 left = mid + 1 以在右半部分继续搜索。输入:nums = [4,5,6,7,0,1,2], target = 0。输入:nums = [1], target = 0。
2024-09-02 10:35:12
607
原创 一起学习LeetCode热题100道(65/100)
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0。
2024-09-02 10:27:53
910
原创 一起学习LeetCode热题100道(64/100)
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true。
2024-08-30 10:19:43
452
原创 一起学习LeetCode热题100道(63/100)
如果未找到目标值,left 将指向第一个大于 target 的元素的位置(或数组末尾的下一个位置,如果所有元素都小于 target)。2.如果 nums[mid] 小于 target,说明目标值在 mid 的右侧(或尚未出现,但应插入的位置在 mid 的右侧)。因此,将 left 更新为 mid + 1。输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。
2024-08-30 10:15:17
471
原创 一起学习LeetCode热题100道(62/100)
3.如果合法,则在该位置放置皇后(更新board、cols、diag1、diag2),并递归调用placeQueen(row + 1)来尝试放置下一个皇后。递归返回后,需要进行回溯,即将当前位置的皇后移除,并恢复相关列和对角线的占用状态,以便尝试其他可能的解决方案。1.基准情况:如果row等于n,说明已经成功地在棋盘上放置了n个皇后,且没有相互攻击的情况。此时,将当前棋盘状态转换为一个解决方案(即一个二维数组,其中每个子数组代表棋盘的一行,并用’Q’和’.'表示皇后和空位),并将其添加到res数组中。
2024-08-29 10:26:25
906
原创 一起学习LeetCode热题100道(61/100)
1.result:一个数组,用于存储所有可能的分割方案。2.current:一个数组,用于在回溯过程中构建当前的分割方案。
2024-08-29 10:20:27
679
原创 一起学习LeetCode热题100道(60/100)
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCB”输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “SEE”
2024-08-28 10:24:29
769
原创 一起学习LeetCode热题100道(59/100)
2.在generateParenthesis函数内部,我们初始化一个空数组result用于存储结果,并调用backtrack函数,传入空字符串’'作为初始括号字符。3.backtrack函数开始递归地尝试所有可能的括号组合,直到找到所有有效的组合,并将它们添加到result数组中。4.最后,generateParenthesis函数返回result数组,其中包含了所有有效的括号组合。输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
2024-08-28 10:19:40
293
原创 一起学习LeetCode热题100道(58/100)
如果candidates已经是有序的,那么在回溯过程中,当我们发现某个数字已经大于target时,就可以立即停止遍历后面的数字,因为它们都太大了,无法与前面的数字组合成target。4.剪枝优化:在遍历过程中,如果发现某个数字已经大于target,则无需继续遍历后面的数字,因为它们都太大了,无法与前面的数字组合成target。2.剪枝:如果target小于0,说明当前路径上的数字之和已经超过了target,无法再找到满足条件的组合,直接返回。输出: [[2,2,2,2],[2,3,3],[3,5]]
2024-08-27 10:34:41
752
原创 一起学习LeetCode热题100道(57/100)
1.首先,我们定义了一个名为digitMap的对象,它包含了从数字到对应字母列表的映射。这是基于电话按键的映射关系。
2024-08-27 10:28:16
679
原创 一起学习LeetCode热题100道(56/100)
这样做是为了确保在下一层递归中,我们不会重复选择已经添加过的元素(即,我们不会考虑 nums[i] 之后的元素作为当前子集的第一个元素)。2.3.在递归调用返回后,我们需要将刚刚添加到 currentSubset 中的元素移除(回溯),以便在下一次循环迭代中尝试不同的元素组合。在每一步中,我们考虑将 nums[i] 添加到当前子集中。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]输入:nums = [1,2,3]输入:nums = [0]输出:[[],[0]]
2024-08-26 10:23:21
763
原创 一起学习LeetCode热题100道(55/100)
1.基准情况:如果 first 等于 nums 的长度,说明当前排列已经被填满,是一个有效的排列,将其添加到 result 中。3.1.将 nums[first] 和 nums[i] 交换,这样可以确保在递归调用 backtrack(first + 1) 时,nums[first] 被视为当前位置的已选元素。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]输入:nums = [1,2,3]输出:[[0,1],[1,0]]输入:nums = [0,1]
2024-08-26 10:18:02
327
原创 一起学习LeetCode热题100道(54/100)
4.当遍历完单词的所有字符后,将最后一个字符对应的节点的isEndOfWord属性设置为true,标记为单词的结尾。3.1.如果不存在,则创建一个新的TrieNode实例,并将其添加到当前节点的children对象中。4.遍历完单词的所有字符后,检查最后一个字符对应的节点的isEndOfWord属性是否为true。3.对于每个字符,检查当前节点的children对象中是否存在对应的子节点。3.对于每个字符,检查当前节点的children对象中是否存在对应的子节点。
2024-08-23 10:46:26
990
原创 一起学习LeetCode热题100道(53/100)
1.我们对每个节点执行DFS,如果任何一次DFS返回false,则表示存在环,我们返回false。3.2.如果邻居节点正在被访问(visited[neighbor] === 1),则直接返回false,因为我们已经通过当前节点回到了这个邻居节点,说明存在环。解释:总共有 2 门课程。1.我们使用graph数组来构建邻接表,其中graph[i]存储了所有指向节点i的边(即所有以i为终点的课程的前置课程)。1.如果节点正在被访问(visited[course] === 1),则发现环,返回false。
2024-08-23 10:30:22
509
原创 一起学习LeetCode热题100道(52/100)
1.如果循环结束后,队列为空但仍有新鲜橘子(freshOranges > 0),则表示无法将所有新鲜橘子腐烂,返回 -1。2.如果一开始就没有新鲜橘子(freshOranges === 0),则直接返回 0,因为没有橘子需要腐烂。3.如果相邻单元格是新鲜橘子(值为 1),则将其变为腐烂橘子(值为 2),并将其坐标加入队列中以便后续处理。输入:grid = [[2,1,1],[1,1,0],[0,1,1]]输入:grid = [[2,1,1],[0,1,1],[1,0,1]]
2024-08-22 10:21:54
665
原创 一起学习LeetCode热题100道(51/100)
1.dfs(row, col) 函数用于执行深度优先搜索。2.首先,检查当前位置 (row, col) 是否越界或是否为水(‘0’)。如果是,则直接返回,因为不需要进一步搜索。3.如果当前位置是陆地(‘1’),则将其标记为已访问(例如,更改为’0’),以避免重复计算。4.然后,递归地向当前位置的四个方向(上、下、左、右)调用 dfs 函数,以遍历岛屿的所有陆地。
2024-08-22 10:17:41
425
原创 一起学习LeetCode热题100道(50/100)
输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。
2024-08-21 10:33:00
456
原创 一起学习LeetCode热题100道(49/100)
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3。
2024-08-21 10:27:33
828
原创 一起学习LeetCode热题100道(48/100)
7.注意:虽然代码中包含了回溯部分(即减少当前路径和的计数并从prefixSums中删除它),但在本问题中,由于树是无环的,并且我们不需要精确跟踪每条路径,因此这部分是多余的。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8。1.这是主函数,接收根节点和目标和作为参数,并返回满足条件的路径数量。
2024-08-20 10:34:34
588
原创 一起学习LeetCode热题100道(47/100)
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]2.使用 [15, 20, 7] 和 [20, 15, 7] 构建右子树(递归过程相同,但规模更小)。1.在中序遍历数组 [9, 3, 15, 20, 7] 中找到 3 的索引,为 1。2.因此,左子树的中序遍历是 [9],右子树的中序遍历是 [15, 20, 7]。输入: preorder = [-1], inorder = [-1]输出: [3,9,20,null,null,15,7]
2024-08-20 10:25:40
342
原创 一起学习LeetCode热题100道(46/100)
现在,当前节点已经按照要求展开了,它的左子指针为null,右子指针指向了一个单链表(可能是空的,如果原来就没有右子树的话),这个单链表包含了原来左子树的所有节点,并且如果原来就有右子树的话,右子树现在被接在了这个链表的末尾。3.将当前节点的右子指针(root.right)设置为原来左子树的根节点(即root.left在步骤1中的值,但此时它已经是null了,因为我们刚刚将其移到了temp中)。输出:[1,null,2,null,3,null,4,null,5,null,6]输入:root = [0]
2024-08-19 10:36:15
559
原创 一起学习LeetCode热题100道(45/100)
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []提示:二叉树的节点个数的范围是 [0,100]-100 <= Node.val <= 100解析:一、定义节点类(如果题目没有给出):二、定义主函数 rightSideView:这个函数接收树的根节点作为输入,
2024-08-19 10:31:33
341
原创 一起学习LeetCode热题100道(44/100)
当遍历到第k个节点时,我们将该节点的值存储在result中,并在遍历完成后返回它。2.访问当前节点:当我们从左子树返回时,我们访问当前节点(即根节点)。如果是,我们将当3前节点的值存储在result中,并提前结束遍历(因为我们已经找到了第k小的元素)。由于二叉搜索树的性质,左子树中的所有节点值都小于当前节点的值。3.遍历右子树:如果count不等于k,我们继续递归地遍历当前节点的右子树。它帮助我们跟踪当前是第几个节点。输入:root = [5,3,6,2,4,null,null,1], k = 3。
2024-08-16 10:24:16
584
原创 一起学习LeetCode热题100道(42/100)
1.使用slice方法将数组分为两部分:左半部分(nums.slice(0, mid))和右半部分(nums.slice(mid + 1))。由于数组索引是从0开始的,这个操作确保了我们总能找到中间位置的元素(如果数组长度是奇数)或两个中间位置元素中的一个(如果数组长度是偶数,这里我们选择靠左的那个)。1.完成上述步骤后,我们得到了一个以nums[mid]为根节点,左子树由左半部分数组构建,右子树由右半部分数组构建的平衡二叉搜索树。输出:[0,-3,9,-10,null,5]输入:nums = [1,3]
2024-08-15 15:13:22
847
原创 一起学习LeetCode热题100道(41/100)
2.在每一层开始时,通过queue.length获取当前层的节点数(即队列中剩余的元素数),记为levelSize。当队列为空时,所有节点都已遍历完毕,此时result数组中存储了完整的层序遍历结果,函数返回result。1.result:用于存储最终的层序遍历结果,每一层的结果作为一个数组存储在result中。5.遍历完当前层的所有节点后,将currentLevel数组加入result数组。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]
2024-08-15 15:08:04
437
原创 一起学习LeetCode热题100道(39/100)
1.如果两个节点都为空(!node1 &&!node2),则它们是镜像对称的,因为两个空树总是镜像对称的。2.如果只有一个节点为空(!node1 ||!node2),或者两个节点的值不相等(node1.val!== node2.val),则它们不是镜像对称的。
2024-08-14 10:43:06
476
原创 一起学习LeetCode热题100道(38/100)
这可以通过使用一个临时变量(temp)来完成,首先将左子节点保存到temp中,然后将右子节点赋值给左子节点,最后将temp(原左子节点)赋值给右子节点。1.由于我们是在原地翻转二叉树(即直接修改了原树的结构),所以返回的根节点实际上就是翻转后的树的根节点。1.如果根节点为空(root === null),则直接返回null,因为没有节点可以翻转。输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]输入:root = [2,1,3]输出:[2,3,1]
2024-08-13 10:23:08
387
原创 一起学习LeetCode热题100道(37/100)
1.首先,我们定义了一个maxDepth函数,它接受一个root参数,即二叉树的根节点。该函数的目的是返回从根节点到最远叶子节点的最长路径上的节点数,即二叉树的最大深度。
2024-08-13 10:19:08
320
原创 一起学习LeetCode热题100道(36/100)
1.当 traverse 函数被初始调用(以根节点为参数)时,它会递归地遍历整棵树,按照“左-根-右”的顺序将节点的值添加到 result 数组中。最终,当所有的递归调用都返回时,result 数组将包含中序遍历的结果,该结果被 inorderTraversal 函数返回。3.访问根节点:然后,将当前节点的值 node.val 添加到 result 数组中。1.这是主函数,它接收二叉树的根节点 root 作为参数,并返回中序遍历的结果(一个包含节点值的数组)。输入:root = [1,null,2,3]
2024-08-12 10:37:59
471
原创 一起学习LeetCode热题100道(35/100)
1.如果超出容量,从链表的尾部移除一个节点(因为尾部节点是最近最少使用的),并从cache中删除对应的键值对。// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}2.如果不存在,创建一个新节点,将其添加到链表的头部,并在cache中存储键与节点的映射。1.如果存在,更新该键对应的节点的值,并将其移动到链表的头部(表示最近被修改过)。2.如果存在,获取对应的链表节点,并将其移动到链表的头部(表示最近被访问过)。
2024-08-12 10:32:24
867
空空如也
html2canvas ios报安全错误
2021-03-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人