- 博客(212)
- 收藏
- 关注
原创 257. 二叉树的所有路径
终止条件:到达叶子节点,即当前节点的左右节点为空,此时生成一条路径,开始回退再遍历。遍历顺序:从根节点出发,先遍历左子树,再遍历右子树。
2025-07-23 14:25:06
269
原创 144、145二叉树的前、后序遍历
所谓前、中、后序遍历,可将遍历名称中的前中后当成根节点的位置即可。前序遍历:先遍历根节点,接着左节点、右节点。
2025-07-21 18:12:34
123
原创 112. 路径总和
若存在从根节点到叶子节点的路径,则其总和=targetSum,所以从根节点出发,依次去遍历左子树、右子树,每遍历一个节点,用targetSum-对应节点的值(回退时加上对应节点的值)。若路径遍历结束且targetSum=0 说明存在对应路径。
2025-07-21 17:56:59
250
原创 2545. 根据第 K 场考试的分数排序
遍历列表,dict1记录每一行的数据,dict2 记录k列数据以及对应的行。根据排序后的dict2,依次获取对应行的数据。对k列数据进行降序排序dict2。
2024-12-21 16:16:47
552
原创 3138. 同位字符串连接的最小长度
dict1对应同位符次数,则说明此同位符是可以构成字符串的。从len(s)-1开始遍历,若 len(s)%i。若存在多个同位符的情况,则选取字符串长度最小的。
2024-12-20 16:09:36
324
原创 203. 移除链表元素
当pre.next and pre.next.val==val时,说明下一结点是符合删除条件的结点,则进行删除操作,否则继续往下遍历。使用新链表=[-1](可随意设置)+head。考虑到删除头结点情况。
2024-12-17 20:43:08
286
原创 54. 螺旋矩阵
若复制代码运行报错,则注意看下代码里的martix是否与题目给的方法的参数不一致。遍历顺序:向右、向下、向左、向上,循环遍历,直到遍历结束。当按顺序遍历结束时,缩小边界。
2024-12-16 16:42:02
191
原创 209. 长度最小的子数组
re=0 表示当前为第一个条件成立的窗口,直接赋值大小,re!=0 ,则比较满足条件的当前窗口和上一个窗口的大小,哪个小就赋值给r。若s-nums[l]>=target,则说明当前符合条件的窗口可以继续缩小窗口,则缩小窗口。re:最小子数组(最小窗口)长度。
2024-12-15 15:18:44
184
原创 76. 最小覆盖子串
l表示滑动窗口初始位置,r表示窗口最末位置,flag表示当前窗口是否全部包含覆盖字符,是True,否:False,re表示最小覆盖子串。if len(re)==0 or len(re)>=r-l+1:加上len(re)==0原因:由于最小覆盖字符初始时设置为’ ',则第一次获取到覆盖窗口时,应直接将窗口的字符串赋值给re。则要去判断缩小窗口(l向右移动)后的窗口还能全覆盖字符t吗,如果覆盖则继续缩小窗口,但缩小后不能覆盖,则说明当前窗口已经是覆盖字符的最小窗口,不能再缩小了,只能扩大窗口。
2024-12-15 14:09:19
364
原创 111. 二叉树的最小深度
1.左右子树都为空,则最小深度=1(只有根节点)(也可理解为 min(0,0)+1)+1原因:递归的是左右子树,找到最小深度后,还要加上根节点即为整个二叉树的最小深度。2.左子树为空,右子树不空,则最小深度=右子树最小深度+1。3.左子树不为空,右子树为空,最小深度=左子树最小深度+1。4.左右子树不为空,最小深度=左右子树最小深度+1。
2024-10-19 10:55:52
281
原创 239. 滑动窗口最大值
当当前值大于等于maxs列表里的值,则删除maxs列表比它小的值,因为这个值与比它小的值所共处的窗口中,它是最大值,那就没有必要留下比它小的值(可以假设成遍历到的值为区间的最后一个数来理解,那这个区间里,当前数是区间最后一个数,而自己又是最大值,说明自己是此区间中的最大值)maxs[0][1]:说明当前窗口的最大值是窗口的第一个数,向右滑动至下一个窗口,下一个窗口无这个值(不参与下一个滑动窗口),所以要删掉对应的值。先创建一个长度为k的滑动窗口,接着依次往右滑动窗口。t:存放每个滑动窗口的最大值。
2024-10-18 16:46:55
340
原创 72. 编辑距离
2.0~j-1 可以弄出word1=word2,也就是0-i可以弄出word2 0~j-1的字符串,则此时word1需要再加一个字符才能相等。dp[0][j]:0代表空字符串,可以理解为空字符变成字符串需要插入字符的次数 即次数为 j。3.0~i-1 可以弄出0~j-1字符串,则word1需要再添加一个字符才能相等。i代表 word1字符串0~i j代表word2字符串0~j。dp[i][0]: 字符串变成空字符串需要删除的次数,即次数为i。j,取操作次数最少的步骤即可。j-1字符串所需要的次数。
2024-10-10 00:52:19
657
原创 75. 颜色分类
从r到len(nums)-1继续进行排序,从尾部开始,将最大值放置尾部。先排最小的数,将最小的数都放至列表前面 则0~r-1都是最小值。
2024-10-10 00:26:11
260
原创 1143. 最长公共子序列
当text1[i]==text2[j]时,当前字符相同,此时的最长公共子序列长度=text1[0:i]、text2[0:j](0~ i-1、0~j-1 )之间最长公共子序列+1。text1[0:i]、text2[0:j]是代表 0~ i-1、0~j-1 (字符串的截取s[i:j]取不到j位置的字符,而是j-1)dp[i][0]、dp[0][j] 代表其中任一字符串为空时的公共子序列,自然是0 为了方便,初始化dp为0。=text2[j]时,当前0~ i、0~j最长公共子序列为下方最长公共序列。
2024-10-09 23:23:31
373
原创 5. 最长回文子串
dp[i][j]回文:s[i]=s[j]且[i-1:j-1]也为回文。从第一个字符开始遍历,判断对应字符串是否是回文且是不是最大长度。dp[i][j] 表示下标位置i到j的字符串是否是回文的情况。时间复杂度:O(N^3)状态初始化为False。
2024-10-08 17:12:00
507
原创 295. 数据流的中位数
(self.stack[t//2-1]+self.stack[t//2])/float(2),记得要用float。中位数:有序列表的中间值,用sort()进行排序。
2024-10-08 12:14:00
199
原创 347. 前 K 个高频元素
4.s1中会有空的情况 如nums =[1,1,1,2,2,3] ,次数4、5、6都没有,为[],所以用t来存储次数不为空的数字(排好序),t[0:k]即为前K个高频元素。如nums =[1,1,1,2,2,3] len(nums)=6 有可能一个数字出现6次的情况。3.s1是记录数字出现0-n次的情况,是有序的,所以从右往左遍历,先遍历到的都是次数最大的。1.哈希集合记录每个数字出现的字数。2.s1来记录出现次数对应的数字。时间复杂度:O(Nlogn)
2024-10-08 12:01:17
333
原创 152. 乘积最大子数组
mins:记录当前位置最小乘积,因为当前位置的最大乘积 有可能是i-1的最小乘积*当前位置。如i-1最小乘积为-3,最大乘积为4 i当前位置值为-2 则。dp[i]最大乘积自然是-3*(-2)=6。maxs:记录当前位置最大乘积。
2024-10-05 18:08:08
212
原创 84. 柱状图中最大的矩形
当前柱子heights[i]小于t[-1]位置柱子,说明t[-1]位置右边的最小柱子出现了,而t[-1]位置左边最小柱子为t[-2](单调递增栈),此时可以计算出以t[-1]位置柱子围成的最大面积。首先下标为0入栈(初始化),接着,当前柱子heights[i]大于等于t[-1]位置的值,说明t[-1]右边最小未出现,将当前柱子入栈。heights首末尾加上0 : 预防 [2,4,6,8]情况 2无左边最小值 列表数字无右边最小值。
2024-10-05 15:56:45
510
原创 739. 每日温度
从第二个温度开始,如果当前温度大于t[-1]位置的温度,则说明找到t[-1]位置温度的下一个更高温度,则修改对应的s。若t=[],说明当前温度高于此位置前的所有温度(即当前位置之前的温度都找到了自己与之的最高温度)。若当前温度小于t[-1]位置温度,说明温度比t[-1]位置温度还低,入栈,继续遍历找比它高的温度。遍历结束后,对于s[i]==-1:说明找不到与之对应最高温度,则赋值为0。
2024-10-04 23:36:59
186
原创 394. 字符串解码
对之前入栈的数据进行出栈操作,遇到’['说明已找到此时需要循环的字符串s,将s反转(栈先进后出,反转后才是原字符串)继续出栈,若出栈的数字,找到非数字为止,则非数字之前的数据n即为要循环的次数。找到循环的字符串和循环次数后,进行循环,接着将循环后的字符依次存入栈t。
2024-10-04 22:45:34
385
原创 79. 单词搜索
未终止,继续循环:记录当前已走过位置(等于work[k]),以当前位置向四周遍历,找到则往对应方向继续循环;四个方向都找不到匹配,则回退再继续遍历。v:代表等于work[k]且已走过的位置。找到了:终止(先判断匹配再判断找到)
2024-10-04 17:44:56
716
原创 134. 加油站
假设起始位置前的净油量和为A,起始位置开始到末尾(-1这个位置)的净油量为B 即能回到起始位置需要总油量为A+B,即A+B>=0时,说明能回到起始位置(循环一圈)到达当前位置total
2024-09-26 01:16:06
333
原创 122. 买卖股票的最佳时机 II
卖出最大利润的情况:当天卖出比前一天卖出利润小,说明前一天就是卖出的最好时期,前一天卖出 : 则今天就是购买的日期 ,买入最小价格必然是今天(新一轮的查找卖出最大利润),则今天买、卖,利润为0。prices.append(0) 预防[1,2,3,4,5]情况。假设dp代表当天卖出的利润。mins代表买入的最小价格。
2024-09-24 12:37:23
348
原创 207. 课程表、210. 课程表 II
dict1用来装有入度的结点以及对应的入度数(如:[0,1] 学了1才能学0:即1指向0,即只有0有入度 所以prerequisites每个值i的i[0]即为有入度的结点)在遍历无入度结点时(代表选这门课程),因为有指向,所以 对应指向值的入度-1,当对应指向值入度为0时即作为下一层的无入度结点 循环遍历。遍历结束后,若dict1中有入度大于0,说明无法完成所有课程的学习。第一层:当前prerequisites无入度的结点。t:表示当前层无入度的结点(入度为0)n:表示下一层无入度的结点。
2024-09-22 15:08:10
305
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人