- 博客(60)
- 收藏
- 关注
原创 Top Interview 150第八天|two pointers
指向“下一个非零元素应该待的位置”。遍历时发现非零元素,直接与。:先把所有非零元素按顺序“挤”到数组前面,记录最后的位置。这种方法在遍历结束时,零自然就被换到了后面。没来得及写,今天先这样吧。
2026-01-30 12:34:07
954
原创 Top Interview 150第七天|slicing window,
如果seen[word] > need[word]: 就移动left缩窗口,每次弹出一个左侧单词,直到seen[word] <= need[word]如果 word 在 need:加入 seen[word] += 1,count += 1。处理每个right取到的word = s[right : right + k]right 每次走 +k,取 word = s[right:right+k]然后为了继续找下一个:弹出左侧一个单词,left += k。(不断弹出 s[left:left+k],直到不超量)
2026-01-30 00:57:00
522
原创 Top Interview 150第六天|stack,hashtable, math
我用栈存储左括号,每当遇到右括号时,我就弹出栈顶元素进行检查。如果匹配不上或者栈为空,说明括号序列无效。int(num[-2] / num[-1]) - 在 Python 中,否则弹出栈顶字符串(前提是栈不为空),模拟返回上一级目录。如果当前字符串是空串或者 .,什么也不做(跳过)。把 path 用 / 分割,得到一个字符串列表。如果当前字符串不是 ..,那么把字符串入栈。这题还蛮难的,需要一步步想,有可能脑子会想晕。,这完美符合“向 0 取整”的要求。不会design 有点放过自己了。
2026-01-28 10:59:46
61
原创 Top Interview 150第五天|274. H-Index, Two Pointers, Hash Table,
写while的时候顺序很重要只有保镖(i < n或)确认安全了,你才去访问具体的数据(或node.val记住几个函数 isalnum.(), lower(), isalpha()纯字母, isdigit()纯数字, islower()纯小写,isupper(), isspace全空白, istitle()全首字母大写简单题,记住以上函数即可在边界问题容易出错i += 1j += 1一遍过15. 3Sum。
2026-01-27 01:22:05
634
原创 Top Interview 150第四天|55. Jump Game,hashtable
for target - x in dict: #这里是找key in the dictionary。函数默认就会按照子列表的第一个元素(索引 0)进行排序,如果第一个相等,再比第二个。是205的升级模式,添加的东西时words = s.split(" ")intervals.sort( ) #Python 的。贪心,每到一个位置就更新当前可到达的最远距离;暴力solution + hash table。怎么给intervals排序?需要复习 - 没能一次写出来。写出来mapping。
2026-01-24 02:49:16
639
原创 Top Interview 150第三天|189. Rotate Array, 121. Best Time to Buy and Sell Stock, 19. Remove Nth Node Fr
2. dp[i][j]的状态转移方程 - dp[i][j] = max(dp[i][j-1], dp[i-1][j-1] + prices[i] - minprice) - 问题出自啊不会推导minprice :(2. dp[i]的状态转移方程 - dp[i] = max(dp[i-1], prices[i] - minprice)1. dp[i][j]表示什么 - j = 0表示目前不持有股票,j = 1表示目前持有股票。1. dp[i][j]表示什么 - 截止到第i天,第j次交易的maxprofit。
2026-01-23 12:49:20
668
原创 Top Interview 150第二天|26. Remove Duplicates from Sorted Array,169. Majority Element,141. Linked List
用一个栈记录去重后的元素,如果当前元素等于栈顶下方那个数(倒数第二个数),那么不能入栈(否则会有三个一样的数),反之可以入栈。,即 nums[fast] 表示待检查的第一个元素,nums[slow−1] 为上一个应该被保留的元素所移动到的指定位。pointers at index 2." (由于题目允许每个元素最多出现两次,前两个元素永远是有效的。还需要复习 - 理解了206,但对于92的操作还是有难度。的票数为 −1 ,则一定有所有数字的。指针遍历元素,寻找满足条件的项。." (关键逻辑在循环内部。
2026-01-22 02:38:05
585
原创 代码随想录算法训练营第六十二天|Floyd 算法精讲,A * 算法精讲 (A star算法),最短路算法总结篇,图论总结
例如题目中只是输入边(节点2 -> 节点6,权值为3),那么grid[2][6][k] = 3,k需要填什么呢?至此已经讲解了四大最短路算法,分别是Dijkstra、Bellman_ford、SPFA 和 Floyd。把k 填成1,那如何上来就知道 节点2 经过节点1 到达节点6的最短距离是多少 呢。所以 只能 把k 赋值为 0,本题 节点0 是无意义的,节点是从1 到 n。理解了遍历顺序才是floyd算法最精髓的地方。grid[i][j][k] = m,表示。1. 深搜与广搜DFS& BFS。
2026-01-21 14:29:04
82
原创 代码随想录算法训练营第六十天|Bellman_ford 队列优化算法(又名SPFA),bellman_ford之判断负权回路,bellman_ford之单源有限最短路
之前我们对all edges 进行relax the edge, 现在我们只需要对上一次松弛的时候更新过的节点作为出发节点所连接的边进行松弛就够了。本体是给定了经过cities的数量限制k,所以松弛(k+1) times。bellman_ford之单源有限最短路(其实这个题目我还不太理解)标准写法是relax the edge in (n-1)times。Bellman_ford 队列优化算法(又名SPFA)引入了队列import collections。bellman_ford之判断负权回路。
2026-01-20 00:36:42
46
原创 代码随想录算法训练营第五十九天|dijkstra(堆优化版)精讲,Bellman_ford 算法精讲
Bellman_ford 算法精讲bellman ford算法的三部曲:1. initialization(可以设置n+1点)1到1的距离为0, 1到2, 1到3,。。1到n的距离为∞2. 进行(v-1)轮松弛(relax the edge) == (对每一条边的操作)3. 如果大于v轮还在更新,说明这有负权回路 -- 需要使用其他方法dijkstra(堆优化版)精讲。
2026-01-19 10:42:45
45
原创 代码随想录算法训练营第五十八天|拓扑排序精讲,Dijkstra算法
1. 为了每次可以找到所有节点的入度信息,我们要在初始化的时候,就把每个节点的入度 和 每个节点的依赖关系做统计。当然拓扑排序也要检测这个有向图 是否有环,即存在循环依赖的情况,因为这种情况是不能做线性排序的。dijkstra算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。之前在optimization课堂上学过,希望作为复习,捡起来很快。3. 将该节点作为出发点所连接的节点的in-degree -1。Dijkstra朴素版。
2026-01-17 01:04:34
38
原创 代码随想录算法训练营第五十七天|prim算法精讲,kruskal算法精讲
最小生成树是所有节点的最小连通子图,即:以最小的成本(边的权值)将图中所有节点链接到一起。(图中为n为7,即7个节点,那么只需要n-1即6条边就可以讲所有顶点连接到一起)-本题中,如何选取n-1条边使得图中所有节点连接到一起,并且边的权值和最小呢?今天在学习prim 和 kruskal的同时,也要清楚这两个算法的区别所在。图中有n个节点,那么一定可以用n-1条边将所有节点连接到一起。的策略每次寻找距离最小生成树最近的节点并加入到最小生成树中。那么如何选择这n-1条边就是最小生成树算法的任务所在。
2026-01-16 02:30:27
42
原创 Top Interview 150第一天|88. Merge Sorted Array,27. Remove Element,21. Merge Two Sorted Lists, 1137, 509
今天从array开始,还有链表linked list,dpdp:if n >=1:dp[1] = 1if n >= 2:recursion:if n < 2:return nelse:用了很简单的方法 - 太久不用dp有点不习惯,明天复习,这个函数就叫递归函数,调用的过程叫做递归。迭代法-dummy - return dummy.next可能的面试interview question:dummydummyprev(orcurr) pointer,dummydummy.next。
2026-01-15 05:16:24
645
原创 代码随想录算法训练营第五十六天|108.冗余连接,109.冗余连接II
如果有多个答案,请删除标准输入中最后出现的那条边: 第一理解是发现一条冗余边后,后面还可能会有一条冗余边。-- 但其实不会同时出现多条冗余边。(所以此时这个图就不能称之为有向树),现在让我们找到那条边 把这条边删了,让这个图恢复为有向树。,返回一条可以删去的边,使得结果图是一个有着N个节点的树(即:只有一个根节点)。因为该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点)。题目是在 树的基础上 添加一条边,所以冗余边仅仅是一条。”,这说明在两条边都可以删除的情况下,要删顺序靠后的边!
2026-01-15 00:38:37
59
原创 代码随想录算法训练营第五十五天|并查集理论基础,107.寻找存在的路线
并查集里寻根的过程 --- 所以father数组初始化的时候需要father[i] = i。判断u and v是否找到同一个根 --- 说明他们在同一个集合中(同属于同一个根)所以我们需要改变树的构造: 把除了根节点 其他所有节点都挂在根节点下,这样寻根的时候很快,只需要一步。对于问题1,将ABC放在同一个集合中,就是将这三个元素连通在一起,如何连通呢?对于第二个问题,我们一路找到了C,通过B和A都指向C,说明A和B在同一集合中。
2026-01-01 04:19:47
162
原创 代码随想录算法训练营第五十三天|110.字符串接龙,105.有向图的完全可达性,106.岛屿的周长
solution2: 计算出总的岛屿数量:result = number of islands *4 - cover *2 #cover是相邻岛屿数量。1. 如何连接:在搜索过程中,可以枚举,用26个字母替换当前字符串的每一个字符,在看替换后 是否在strList里出现过,就可以判断 两个字符串 是否有是连接的。无权图 - BFS最合适,只要搜到了终点就一定是最短 - 因为BFS就是以起点为中心向四周扩散的搜索。无权图 - 找最短路径 不需要用Dijkstra算法-可以用广搜/深搜。
2025-12-31 02:09:07
151
原创 代码随想录算法训练营第五十二天|101.孤岛的总面积,102.沉没孤岛,103.水流问题,104.建造最大岛屿
grid[x][y] = 0 #把当前这个陆地1改成0(水/已访问过)思路:要求找不靠边的陆地面积,只需要把从周边找到陆地,通过dfs/ bfs将周边靠陆地且相邻的陆地变成海洋,再去遍历地图即可。dfs(visited, x, y, mark): --- mark是陆地的编号。#变成了count记录是否访问过,grid[x][y]就代表访问过或者是海洋。好难啊,逆向思维,从低处往高处搜索 -- 做了注释,每次把海洋变成陆地的时候,都统计一次陆地的大小。
2025-12-30 12:59:40
332
原创 代码随想录算法训练营第五十一天|99.岛屿数量 深搜,99.岛屿数量 广搜,100.岛屿的最大面积
思路:遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都标记上。在遇到标记过的陆地节点和海洋节点的时候直接跳过。1. 写法1的终止条件是 #满足什么不进行递归,一般无限死循环是因为节点在被重复访问。方法:1. DFS, 2.BFS,3.并查集。解题思路都是一样的,如何用广搜搜索所有陆地呢。,而不是从队列拿出来的时候再去标记走过。难点在于如何把area融合到代码中。99.岛屿数量 深搜(模版题)100. 最大岛屿面积。99.岛屿数量 广搜。
2025-12-19 01:54:49
102
原创 代码随想录算法训练营第五十天|图论理论基础,深搜理论基础,98. 所有可达路径,广搜理论基础
例如:通信网络(拓扑排序、最短路算法),社交网络(深搜、广搜),路径优化(最短路算法),任务调度(拓扑排序),生物信息学(基因为节点,基因关系为边),游戏开发(A * 算法等)等等。深搜三部曲:1.确定函数 & 参数,2.确定终止条件,3. for(选择本节点连接的节点) - 处理节点 - dfs(图,选择的节点) - 回溯,撤销处理结果。定义全局变量(四个方向的遍历那个)dir = [[0, 1], [1, 0], [-1,0], [0,-1]]中,任何两个节点是可以相互到达的,我们称之为 强连通图)
2025-12-17 05:30:49
371
原创 代码随想录算法训练营第四十九天|42.接雨水,84.柱状图中最大的矩形
面试高频题,我看到topics有三种解法:1.双指针,2.单调栈,3.dynamic programming。既可以按行(monotonic stack)也可以按列(two pointers)的方法计算雨水量。单调栈:从栈顶到栈底:从大到小(每插入一个新的小数值时,都要弹出先前的大数值)栈顶,栈顶的下一个元素,即将入栈的元素:这三个元素组成了最大面积的高度和宽度。关键的三个元素:mid,右边第一个小于mid,左边第一个小于mid。找每个柱子左右侧的第一个高度值小于该柱子的柱子。单调栈有点难想,似懂非懂。
2025-12-16 13:43:45
215
原创 代码随想录算法训练营第四十八天|739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II
从头到尾过了一遍,感觉有点理解了,但却是不熟悉,while条件也很有趣:while len(stack) > 0 and temperatures[i] > temperatures[stack[-1]]:可以运行,但是while temperatures[i] > temperatures[stack[-1]] and len(stack) > 0:却不可以运行,所以and也不能完全等价。单调栈:空间换时间,遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素(1. 取模的过程模拟成环的遍历。
2025-12-16 04:26:10
404
原创 代码随想录算法训练营第四十六天| 647. 回文子串,516.最长回文子序列,动态规划总结
在left and right element same的情况下,只要中间的字符串是回文string,向两边拓展的就是回文字串。dp[i][j]表示s[i:j]中longest palindromic subsequence的最长长度。其实carl用的extend function就是把这两种情况给用function表达了出来。有三种情况:1. i==j, 2. j-i = 1, 3. j-i > 1。dp[i][j]: [i, j]这个子串是否是回文子串substring。对着这套逻辑居然写出来了。
2025-12-11 13:22:22
229
原创 代码随想录算法训练营第四十五天| 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离,编辑距离总结篇
if s[i-1] = t[j-1]: dp[i][j] = dp[i-1][j-1] + dp[i-1][j] #前面都匹配上了,所以使用dp[i-1][j-1],我们不适用这个t[j-1]使用之前满足条件的。dp[i][j]: word1到i,word2到j,为了一样,需要删除的number of steps。删除dp[i-1][j]+1,也可以删除dp[i][j-1]+1。dp[i][j]:以i-1为尾的s中有以j-1为尾的t的数量。替换:dp[i][j] = dp[i-1][j-1] + 1。
2025-12-11 09:58:11
207
原创 代码随想录算法训练营第四十四天|1143.最长公共子序列, 1035.不相交的线, 53. 最大子序和,392.判断子序列
if text1[i-1] == text2[j-1]: #这里原本写错了,写成了text1[i] == text2[j],没想到text的长度可没变。理解:如果dp[i-1]是负数的话,只会拖累dp[i],所以要从头开始计算,dp[i]的含义也是一定要包括nums[i]或者说一定以nums[i]结尾的连续子序列的和。dp[i][j]意思很明确,nums1到i-th number, and nums2到j-th number,有dp[i][j] uncrossed lines。之前用贪心做过,现在用dp。
2025-12-09 12:26:48
309
原创 代码随想录算法训练营第四十三天| 300.最长递增子序列,674. 最长连续递增序列, 718. 最长重复子数组
应该是nums1走到i的位置,nums2走到j位置,dp[i][j]表示maximum length of a subarray。initialization: dp[i][j] = 0,但是对于有出现nums1[i]=nums2[0]或者nums1[0]=nums2[j]的初始化应该为1(nums1)我之前只想到了dp[i]和dp[i-1],dp[i-2]的对比,却没想到可以用j来遍历小于i的每一个字母。思考过程:dp[i]表示直到第i个number,dp[i]:最长递增子序列的长度。
2025-12-08 05:20:41
288
原创 代码随想录算法训练营第四十二天| 188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期, 714.买卖股票的最佳时机含手续费
我写的:dp[i][0] = max(dp[i-1][0], dp[i-1][3] - prices[i], dp[i-1][1] - prices[i])和dp[i][0] = max(dp[i-1][0], max(dp[i-1][3], dp[i-1][1]) - prices[i])结果一样,但感觉思路有点不一样。dp[i][0] = max(dp[i-1][0], dp[i-1][1] -prices[i], dp[i-1][3] - prices[i]) #持有股票状态 - 买入股票。
2025-12-05 06:47:49
292
原创 代码随想录算法训练营第四十一天| 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II, 123.买卖股票的最佳时机III
有个地方写错了:dp[i][1] = max(- prices[i], dp[i-1][1]) #之前写成了dp[i][1] = max(dp[i-1][0]- prices[i], dp[i-1][1]),要知道只能买入一次股票,我写的反而是可以买卖多次股票的解法。dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])#第i天持有股票的profit。dp[i][0] #第i天持有股票的profit。所以dp[0][3] = -prices[0]
2025-12-04 12:29:54
142
原创 代码随想录算法训练营第三十九天|198.打家劫舍,213.打家劫舍II,337.打家劫舍III
dp = [[0,0] for _ in range(n)] #创建二维动态规划数组,dp[i][0]表示不抢劫第i个房屋的最大金额,dp[i][1]表示抢劫第i个房屋的最大金额。dp[0], dp[1] = nums[0], max(nums[0],nums[1]) #我原本写成了dp[0], dp[1] = nums[0], nums[1]我写的递推是:dp[i] = max(dp[i-1], dp[i-2]+nums[i])如果不偷第i间房,那么dp[i] = dp[i-1]树形dp的基础入门题目。
2025-12-04 04:58:02
339
原创 代码随想录算法训练营第三十八天|322. 零钱兑换,279.完全平方数,139.单词拆分,多重背包,背包问题总结
if [j, i]存在于字符串dp中,同时dp[j] = true,则dp[i] = true(j<i)#就是前面是true,中间在子串中,整体是true。为什么用dp[j] = min(dp[j-i]+1, dp[j]) instead of dp[j] = dp[j-i] + 1,没说硬币按顺序呀。dp[i]是为了达到amount=i的最小硬币数量,所以initialization需要把dp[i] = float('inf')无穷大。如果求排列数就是外层for遍历背包,内层for循环遍历物品。
2025-12-04 03:02:50
214
原创 代码随想录算法训练营第三十七天|完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)
跟着修修改改倒是写出来了,第一眼奇怪,amount=0,coins = [7]时,算是有一种方法可以解答(什么都不拿),但是amount = 3,coins[2]时却没有答案。[j - weight[i]] + vlaue[i]) (Recall:01背包:dp[i][j] = max(dp[i-1][j],dp[i][j] #表示使用[0, i]的coins凑成了amount = j的组合数量有dp[i][j]种方法。和01背包的不同之处:dp[i][j] = max(dp[i-1][j],
2025-11-30 11:50:48
162
原创 代码随想录算法训练营第三十六天|1049. 最后一块石头的重量 II,494. 目标和,474.一和零
dp[i][j] = max(dp[i-1][j], dp[i-1][j-stones[i]] + stones[i]) #容量为j时,填充物品i的价值。去掉[i]之后,递推公式变成dp[j] = dp[j] + dp[j-nums[i]] 等价于 dp[j] += dp[j-nums[i]]画图出来,dp[i][j] from dp[i-1][j]和左上角的dp[i-1][j-nums[i]],所以初始化最左边和最上边的一行。dp[j] # targetsum=j时,达到的sum,所以dp[j]<=j。
2025-11-29 03:58:37
309
原创 代码随想录算法训练营第三十五天|背包问题 二维、一维,416. 分割等和子集
是否放入物品i表达式:dp[i][j] = max(dp[i-1][j], dp[i-1][j - weight[i] + value[i])递推公式:dp[j] = max(dp[j], dp[j-weight[i]] + value[i]) #不放物品i的价值,与加入物品i的价值。01背包问题举例:有n种物品,每种物品只有一个,每种物品都有自己的重量和价值,有一个最多只能放重量为m的物品,这个背包能装的最多价值是多少?01背包*,完全背包*,多重背包,分组背包,混合背包。为什么一维数组必须倒叙遍历?
2025-11-28 12:58:40
362
原创 代码随想录算法训练营第三十四天|62.不同路径,63. 不同路径 II,343.整数拆分
1.考虑拆成2个数的情况 j*(i-j),2.考虑拆成3个数的情况j*dp[i-j] 3. 拆成3个数以上: dp[j] * dp[i-j]dp[i][j] = dp[i-1][j] + dp[i][j-1] #但是要保证obstacle[i][j]!dp[i][j]是走到[i, j]的数量和,只能从dp[i-1][j]和dp[i][j-11]两个位置走到。所以,递推公式: dp[i][j] = dp[i-1][j] + dp[i][j-1]定义dp[i]: 对i进行拆分,得到最大的乘积为dp[i]
2025-11-26 07:52:36
275
原创 代码随想录算法训练营第三十二天|509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
递推公式 dp[i] = min(dp[i-1] + cost[i], dp[i-2]+cost[i])2.递推公式已经告诉了我们: dp[i] = dp[i-1]+dp[i-2]初始化:dp[0] = cost[0], dp[1] = cost[1]递推公式dp(i) = dp(i-1) + dp(i-2)已经告诉我们dp[0] = 0, dp[1] = 1。动态规划:dp(4) = dp(3) + dp(2)初始化:dp(1) = 1, dp(2) = 2。打印 min(dp[-1], dp[-2])
2025-11-24 04:50:43
180
原创 代码随想录算法训练营第三十一天|56. 合并区间, 738.单调递增的数字
比如如何写List[List[int]], 其实就是:result.append([cur_l, cur_r])当时在想如果出现[1, 3][2, 4][3, 5]如何合并,比如删掉前一个【】啥的。1. 找到第一个位数开始最后一个满足的//从最后开始第一个不满足的:n[2] = 3。3. 如果你和前面相等,你也变成9,前面一个-1(while循环)看到Carl说思路好想,让我来写一下我的思路。思路没啥问题,代码还是出错了,让gpt改正的。从后往前遍历,一趟搞定,更简单。如果你和前面不相等,自己-1。
2025-11-23 15:03:37
205
原创 代码随想录算法训练营第三十天|452. 用最少数量的箭引爆气球,435. 无重叠区间,763.划分字母区间
只要右边界>左边界 = 重叠。有了上一题的经验,代码一次过。1. 统计每个字符的最远位置。两个右边界的minimum。
2025-11-22 14:51:03
223
原创 代码随想录算法训练营第二十九天|134.加油站,135.分发糖果,860.柠檬水找零,406.根据身高重建队列
我一开始想用字典,但对字典的正确代码形式写不熟,经过gpt发现list也可以写出来。出现环形的模拟:index = (index +1) % len(cost)一旦全程的最低油量minFuel出现了>=0的情况,说明这个点可以成为起始点。想处理好一边再处理另一边,不要两边想着一起兼顾,后面还会有题目用到这个思路。只要遇到两个维度都要考虑,就需要每个维度单独考虑,再结合写答案。for循环适合从头到尾的遍历,while适合模拟环形遍历。1. 左边孩子比右边孩子大。2. 右边孩子比左边大。
2025-11-22 02:41:45
134
原创 代码随想录算法训练营第二十八天|122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次取反后最大化的数组和
写的感觉像是two pointers, 写的时候感觉只有单调递增部分需要计算profit。第一天没有利润,至少要第二天才会有利润。走到能覆盖的最远才计算step+=1。跳跃覆盖范围是否可以覆盖到终点。局部最优:收集每天的正利润。carl方法:只收获正数。全局最优:求得最大利润。用计算语言表示有点难。
2025-11-21 13:40:54
186
原创 代码随想录算法训练营第二十七天|贪心算法基础,455.分发饼干,376. 摆动序列,53. 最大子序和
但如果出现负数,和result比较,如果>result,记录这一段的sum;如果令result减小,则重新开始数。贪心算法:没有规律,找每个阶段局部最优解 --> induce 全局最优。感觉像是是否是凸性问题,是就用贪心?接触动态规划DP后,对比贪心&DP。2. 平坡出现在数组首尾两端。先用大饼干喂大胃口的小孩。3. 单调坡度出现平坡。1. 上下坡中有平坡。如果出现正数肯定是+
2025-11-18 23:41:47
145
原创 代码随想录算法训练营第二十五天|491.递增子序列,46.全排列,47.全排列 II
if i > 0 and nums[i] == nums[i-1] and not used[i-1]: #第一次写的时候,没写not used[i-1]这个意思是之前用过used[i-1]走recursion。这里的要求是nums[i] >= path[-1]所以如果path存在且nums[i] < path[-1],则continue跳过这个数。还有332.重新安排行程(建议跳过,力扣修改后台数据,应该不能用回溯了),51.N皇后(适当跳过),37.解数独(适当跳过)没写。树枝上不去重,树层去重。
2025-11-18 13:02:16
444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅