- 博客(75)
- 收藏
- 关注
原创 四数相加贰——哈希表
给你四个整数数组 、、 和 ,数组长度都是 ,请你计算有多少个元组 能满足:示例 1:输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输出:2解释:两个元组如下:1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 02. (1, 1, 0, 0) -> nums1[1] + nums
2025-12-12 16:08:38
132
原创 有序数组的平方——双指针
给你一个按排序的整数数组nums,返回组成的新数组,要求也按排序。平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]
2025-12-12 11:14:43
138
原创 编辑距离——多维动态规划
给你两个单词 和 , 请返回将 转换成 所使用的最少操作数 。你可以对一个单词进行如下三种操作:示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')思路dp[i,j] 表示 wo
2025-12-03 11:01:11
542
原创 寻找重复数——环形链表
给定一个包含n + 1个整数的数组nums,其数字都在[1, n]范围内(包括1和n),可知至少存在一个重复的整数。假设nums只有,返回。你设计的解决方案必须数组nums且只用常量级O(1)的额外空间。23。
2025-12-02 15:28:07
378
原创 下一个排列
整数数组的一个就是将其所有成员以序列或线性顺序排列。arr[1,2,3][1,3,2][3,1,2][2,3,1]整数数组的是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。[1,3,2][3,1,2][1,2,3][3,2,1]给你一个整数数组nums,找出nums的下一个排列。必须。
2025-12-02 11:40:50
542
原创 颜色分类——三路快排
给定一个包含红色、白色和蓝色、共n个元素的数组nums对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数01和2分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。[0,1,2]
2025-12-01 16:11:36
458
原创 多数元素——摩尔投票
给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。32。
2025-12-01 15:05:09
224
原创 只出现一次的数字——位运算
给你一个整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。14。
2025-12-01 14:51:18
148
原创 最长公共子序列——多维动态规划
给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。3最长公共子序列是 "ace" ,它的长度为 3。
2025-11-28 17:03:29
434
原创 最长有效括号——动态规划
给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如"(()())"。s = "(()"2最长有效括号子串是 "()"
2025-11-25 11:05:15
535
原创 分割等和子集——01背包
给你一个的数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]
2025-11-25 10:47:47
242
原创 乘积最大子数组
请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。注意:因为可能存在负值,而偶数个负值相乘可以变成正值。所以乘积最大值可能来自前一个。cur_max[i] 表示以 nums[i] 为结尾的连续子数组的乘积最大。,一个只包含一个元素的数组的乘积是这个元素的值。子数组 [2,3] 有最大乘积 6。还可能和前面的数据无关,是。所以还需要一个最小值的数组。测试用例的答案是一个。
2025-11-25 10:24:01
190
原创 最长递增子序列——贪心+二分查找
给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。
2025-11-21 15:53:46
337
原创 完全平方数——有限深度搜索
给你一个整数n,返回和为n的完全平方数的最少数量。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149和16都是完全平方数,而3和11不是。n = 123。
2025-11-21 11:38:10
216
原创 爬楼梯——矩阵快速幂
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶。
2025-11-17 20:44:05
465
原创 划分字母区间——存放字母时哈希表可用数组实现
给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串"ababcc"能够被分为,但类似或的划分是非法的。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。[9,7,8]划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
2025-11-13 11:20:47
208
原创 跳跃游戏二——贪心
跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳3步到达数组的最后一个位置。思路: while 每一次循环,就对应 当前的step值。step=1,对应 [1,2]向后跳转的最大长度。换句话说,如果你在索引。如 step=0,对应 [0,0]测试用例保证可以到达。每一次step+1,对应的。处,你可以跳转到任意。初始位置在下标 0。
2025-11-13 10:27:36
301
原创 柱状图中最大的矩形——单调栈的集大成者
个非负整数,用来表示柱状图中各个柱子的高度。但是在while循环里确定右边界的时候,等于被认定成了可以是右边界,这就出错了。相等的这些元素里,最右边那个的结果一定是正确的,最后也可以得到最终的结果。计算以每根柱子为高的最大矩形面积,并取所有柱子中的最大值作为结果。这样每个柱子的左右边界都能在一次线性遍历中确定,最后根据。按理说 中间两个 4 的返回结果应该是一样的,问题出在了。求在该柱状图中,能够勾勒出来的矩形的最大面积。每一次的计算结果:[4, 4, 8, 6]。最大的矩形为图中红色区域,面积为 10.
2025-11-05 11:02:10
583
原创 每日温度——单调栈
保存温度下标,当遇到比栈顶下标对应温度更高的温度时,就弹出栈顶,计算两者的下标差作为等待天数。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。,表示每天的温度,返回一个数组。
2025-11-05 10:28:16
169
原创 字符串解码
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。前必须有数字,所以如果没有,需要先 push 一个 1。给定一个经过编码的字符串,返回它解码后的字符串。测试用例保证输出的长度不会超过。,表示其中方括号内部的。
2025-11-05 10:01:03
208
原创 寻找两个正序数组的中位数
③边界数值一共四个,left1、left2、right1、right2。,在满足③的情况下,就能保证 可能构成 中位数 的一些元素 出现在 i j 所造就的边界上。i=0 表示:分隔线 在 0 的左侧,nums1 左半部分为空,右半部分是 全部nums1。i=m 表示:分隔线 在 m 的左侧,nums1 左半部分 是全部nums1,右半部分是空。left,right = 0,m【分隔线取值:[0,m] 】② i 和 j 分别将两个数组分成左右两半个部分 ,,需要让num1是比较短的数组。
2025-11-04 20:40:11
419
原创 搜索旋转排序数组
nums[mid] >= nums[left]:必须是>=:比较特殊的就是==这种情况需要划分到哪个分支(==是集合有一个或两个数,在集合有两个数的情况。两个数的时候,必须走left=left+1,才能考虑到所有情况 ,可以用nums=[3,1] target=1 举例子。,有序的左右边界组成的区间如果包含target,则一定在这个区间,缩小到这个区间继续找;思路:将数组一分为二,其中一定有一个是有序的,另一个是“小”旋转排序数组【也可能是有序】。,则返回它的下标,否则返回。按升序排列,数组中的值。
2025-10-31 15:30:00
139
原创 在排序数组中查找元素的第一个和最后一个位置
找第一个值:当nums[mid]==target时,用first记录下来当前的位置,然后right=right-1继续向前查找,查看有没有位置更靠前的。找最后一个值同理,此时nums[mid]==target时,更新left=left+1。思路:用first、last分别记录最后结果。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。
2025-10-31 15:12:04
189
原创 N皇后问题
主对角线不冲突:row-col不重复【同一主对角线的元素满足 row1-col1==row2-col2,如(1,0)和(2,1)】次对角线不冲突:row+col不重复【同一次对角线的元素满足 row1+col1==row2+col2,如(1,2)和(2,1)】思路:①三个set( column、diagonal1、diagonal2 ),分别对应列、主对角线、次对角线 不冲突。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。如上图所示,4 皇后问题存在两个不同的解法。
2025-10-31 11:50:56
611
原创 单词搜索——规范地进行回溯
经验:不在找到后立马返回,而是通过found变量记录当前结果。目的是保证visited的正确性,因为如果直接return的话,是没有将visited变为false的(退出本分支,visited需要设置为false【回溯的要求】)单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
2025-10-31 11:34:51
254
原创 组合总和——回溯模版
给你一个 无重复元素 的整数数组 和一个目标整数 ,找出 中可以使数字和为目标数 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 的不同组合数少于 个。示例 1:输入:candidates = [2,3,6,7], target = 7输出:[[2,2,3],[7]]解释:2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意
2025-10-23 23:25:24
277
原创 全排列——交换的思想
思路:最后存在result一定是pai.copy(),因为所有的pai即便是传参也是相当于同一个对象(就是只是地址)。比较巧妙的在于可以通过交换元素,来控制。的元素都集中在nums数组后半部分。给定一个不含重复数字的数组。
2025-10-21 22:35:59
495
原创 实现Trie(前缀树)
是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。思路:核心代码并不困难,重要的是数据结构的构思。(发音类似 "try")或者说。相当于判断某条路径是否存在。
2025-10-21 22:30:02
315
原创 课程表——拓扑排序
enter数组表示入度,只有入度为0的时候才可以学习该门课程,out字典存的以某个课程为前置的课程的所有后置课程有哪些。不断进行删边,直到删不动了为止。如果上的课程数量==numCourses,则true,否则false。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。思路:本质是判断是否为。
2025-10-20 17:24:41
424
原创 腐烂的橘子——LEGB 作用域规则
Python 查找变量时遵循LEGB 顺序只有函数、类、模块会创建新的作用域;ifforwhile不会。若要在函数中修改外层或全局变量,需显式使用nonlocal或global。
2025-10-20 17:03:21
362
原创 二叉树中的最大路径和
思路:先找root左右子树的最长路径,小于0会使路径变小,当0处理(即不走这个路径)。可以得到以当前节点为拐点的所有路径最大的那条,再和self.maxSum比较留较大值。return的是通过当前节点的最大(直的)路径,即root.val+max(left,right)被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中。最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。节点,且不一定经过根节点。是路径中各节点值的总和。给你一个二叉树的根节点。
2025-10-20 16:58:11
187
原创 二叉树的最近公共祖先
思路:dfs的返回值是一个元组(公共祖先,已经找到的节点数量),公共祖先如果还不确定就是None,已经找到的节点数量 最大就是2(即p、q都找到了)。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(左(或右)子树返回的是ALL_FOUND(也就是2),证明在左(或右)子树上就已经找到了公共祖先,继续往上返回即可。左或右有一个是PARTIAL_FOUND,但是当前节点是p或q其一,当前节点是公共祖先。
2025-10-20 16:49:59
438
原创 路径总和——回溯
思路:采用回溯的思想,dfs的sum参数是当前路径所有数的和。当遍历完左右子树后回退时,需将prefixDict字典中的这个路径的前缀和记录删除。不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。和等于 8 的路径有 3 条,如图所示。,求该二叉树里节点值之和等于。给定一个二叉树的根节点。
2025-10-20 16:25:36
310
原创 二叉树展开为链表
思路:递归展开,先展开左右子树,函数返回值是子树的最后一个节点,对于当前树来说,最后一个节点是右子树的最后一个节点(如果没有右子树,就是左子树的最后一个节点)。然后进行展开操作,if lastL:是判断左子树是否是空的,如果左子树为空,是不需要进行操作的(因为已经递归过左右子树,右子树本身就是展开好的了)。左子树不空,找到左子树的最后一个节点,这个节点的右孩子指向右子树。左子树挪到右边,左子树指向空。如果左子树不空,左子树的最后一个节点的右孩子指向右子树,左子树挪到右边,左子树指向空。
2025-10-18 12:37:35
405
空空如也
java 事件意料之外多次触发
2023-08-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅