- 博客(60)
- 收藏
- 关注
转载 【转载】wandb发生crashed,服务器任务仍然在运行,恢复wandb任务的解决方案
这个问题其实在官方repo有人反馈,可以查阅官方issue。这个问题是由网络不稳定引起的,解决方案也很简单,在本地脚本结束后,找到本地的wandb文件,用以下命令同步到线上的wandb里,假设本地的wandb文件名为。线上wandb 挂起(卡死),本地脚本仍然正常运行,到wandb上查看run的状态, 显示为。再刷新线上wandb的页面,就可以看到最新的实验记录。
2024-05-29 15:00:56
211
2
原创 【补】代码随想录第55天|● 583. 两个字符串的删除操作 ● 72. 编辑距离
dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。所以在dp矩阵中一定是从左到右从上到下去遍历。
2024-03-19 00:52:35
234
原创 代码随想录第54天| ● 392.判断子序列 ● 115.不同的子序列
dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。递推顺序:从上到下 从左到右。
2024-03-08 16:45:10
276
原创 代码随想录第53天|● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]通过pre记录前一个dp[j-1] 循环中记录cur为dp[i],循环结束后再更新pre=cur。dp[i]:包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]。注意pre和cur放置的位置。和最长公共子序列相同。
2024-03-08 13:59:41
347
原创 代码随想录第52天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组
我们可以看出dp[i][j]都是由dp[i - 1][j - 1]推出。那么压缩为一维数组,也就是dp[j]都是由dp[j - 1]推出。也就是相当于可以把上一层dp[i - 1][j]拷贝到下一层dp[i][j]来继续用。dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。注意:需要判断[0]输出是1的情况。
2024-03-07 01:06:07
324
原创 代码随想录第51天|● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结
● 714.买卖股票的最佳时机含手续费33再卖出时考虑手续费
2024-03-06 01:43:25
216
原创 代码随想录第50天|● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV
dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。
2024-03-05 21:39:18
223
原创 代码随想录第46天|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II
因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。递增(i>i-1)则代表可以在后面继续抛售,新的购入也是递增,则res前后两个区间都可以相加。疑惑:为什么dp[1]和dp[0]更新了仍然不受影响?dp[i][1] 不持有股票的最多现金。dp[i][0] 持有股票的最多现金。
2024-03-04 02:36:31
239
原创 代码随想录第45天|● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
考虑首部0到n-1或者1到n尾部。dp[0]不偷 dp[1]偷。
2024-03-04 02:02:36
474
原创 代码随想录第45天|● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数
【代码】代码随想录第45天|● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数。
2024-02-29 00:59:05
318
原创 代码随想录算法训练营第44天|● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
【代码】代码随想录算法训练营第44天|● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ。
2024-02-28 01:41:38
245
原创 代码随想录算法训练营第42天|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
sum += num;i<n;i++){j--){
2024-02-28 00:40:52
144
原创 代码随想录第41天|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集
看完了提个小建议,解释倒序遍历那一部分用一句话解释可能更好,比如“列表后面的值需要通过与前面的值比较确定,因此要先处理”。举了个例子反倒会让观众的关注点从逻辑本身转移到数字和具体的计算上。
2024-02-25 23:12:41
289
原创 代码随想录第38-40天动态规划|● 理论基础 ● 斐波那契数 ● 爬楼梯 ● 使用最小花费爬楼梯 ● 不同路径 ● 不同路径② ● 整数拆分 ● 不同的二叉搜索树
注意:在遍历行列m和n时,j列要从0开始(因为第一(i=0)列的初始化没有考虑障碍物的情况,要单独进行赋值)dp表示到达第i个花费的钱数,那么dpi就是前一个或者前两个的dp+cost的价格,然后取min。按照行遍历,每次dp[i]都由前一个dp[i-1]+当前dp[i](表示上一行向下的方法)覆盖。i从3开始 j从1开始 到i的一半。dp[i]应该随时更新。
2024-02-24 00:40:21
408
原创 补-代码随想录第23天|● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
【代码】补-代码随想录第23天|● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树。
2024-02-20 19:13:45
147
原创 补-代码随想录第22天| ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
代码:向左右分支去查找,找到则返回。
2024-02-19 18:43:09
288
原创 补-代码随想录第21天|● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
int val;//默认为null//中序遍历 左中右//终止条件//左//中if(pre!=null){//不用绝对值,前-后一定递增pre=root;
2024-02-19 17:52:28
198
原创 代码随想录第37天|738.单调递增的数字 968.监控二叉树
最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9.在二叉树上进行状态推导,其实难度就上了一个台阶了,需要对二叉树的操作非常娴熟。如100不能单纯的变为090. 而应该后面的都为9也就是099。本题的难点首先是要想到贪心的思路,然后就是遍历和状态推导。后序遍历,根据左右节点的情况,来判读 自己的状态。这道题目是名副其实的hard,大家感受感受。
2024-02-19 11:58:21
263
原创 代码随想录第36天|● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙!还是属于那种,做过了也就会了,没做过就很难想出来。不过大家把如下三题做了之后, 重叠区间 基本上差不多了。
2024-02-19 11:18:17
326
原创 代码随想录第34天|● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
可以最后再判断five是正还是负。
2024-02-18 23:16:17
314
原创 代码随想录第33天|● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果
【代码】代码随想录第33天|● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果。
2024-02-18 21:47:20
138
原创 代码随想录第32天|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
记录这一步的最大覆盖范围,在这个覆盖范围里,去找里面包含的(下一步能达到的最大覆盖范围)。按照最大覆盖范围去跳,次数就会最少。每找到一次覆盖范围则相当于跳跃了一次。
2024-02-17 00:31:56
238
原创 代码随想录算法训练营第31天|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和
从代码中可以看出我用了一个 index 来控制饼干数组的遍历,遍历饼干并没有再起一个 for 循环,而是采用自减的方式,这也是常用的技巧。贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。有的同学看到要遍历两个数组,就想到用两个 for 循环,那样逻辑其实就复杂了。基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。学完贪心之后再去看动态规划,就会了解贪心和动规的区别。不用花心思去研究其规律, 没有思路就立刻看题解。
2024-02-16 22:30:23
265
原创 代码随想录算法训练营第29天|491.递增子序列 * * 46.全排列 * 47.全排列 II
通过数组去重,取代hashset。path是linkedlist。
2024-02-08 15:51:56
286
原创 代码随想录第28天|● 93.复原IP地址 ● 78.子集 ● 90.子集II
使用stringBuilder,故优化时间、空间复杂度,因为向字符串插入字符时无需复制整个字符。// startIndex: 搜索的起始位置, pointNum:添加逗点的数量。
2024-02-07 04:03:44
264
原创 代码随想录第27天|● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串
注意:将参数在传入函数时再进行操作,则不用进行回溯,否则一定要进行回溯。同一数层:相同深度的叶子节点。
2024-02-07 02:58:52
198
原创 代码随想录第25天|● 216.组合总和III ● 17.电话号码的字母组合
【代码】代码随想录第25天|● 216.组合总和III ● 17.电话号码的字母组合。
2024-02-06 17:52:54
306
原创 代码随想录第二十四天| 回溯算法● 理论基础 ● 77. 组合
从下图中红线部分可以看出,在集合[1,2,3,4]取1之后,下一层递归,就要在[2,3,4]中取数了,那么下一层递归如何知道从[2,3,4]中取数呢,靠的就是startIndex。举个例子,n = 4,k = 3, 目前已经选取的元素为0(path.size为0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [1,4],以此类推。
2024-02-03 04:11:32
841
原创 代码随想录第19天|● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
/ 左if(root.val>prev){ // 中}else{// 右以上代码是因为后台数据有int最小值测试用例,所以都把maxVal改成了longlong最小值。如果测试数据中有 longlong的最小值,怎么办?不可能在初始化一个更小的值了吧。建议避免 初始化最小值,如下方法取到最左面节点的数值来比较。// 左if(!left){// 中 比较当前节点和前一个节点if(pre!pre = root;// 右。
2024-01-29 15:22:15
585
原创 代码随想录第十八天|● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
说到一层一层切割,就应该想到了递归。来看一下一共分几步:第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组第六步:递归处理左区间和右区间不难写出如下代码:(先把框架写出来)// 第一步。
2024-01-28 22:47:37
584
原创 代码随想录第十七天| ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
Java 可以直接定义一个成员变量为object的栈,这个栈可以放 TreeNode,可以放 String,这样就不需要搞两个栈,都放在一个栈里即可。递归时把 tmp作为函数参数就是可以的,因为并没有改变String tmp的数值,执行完递归函数之后,tmp依然是之前的计算的数值(相当于回溯了)depth代表当前迭代节点的高度,往下走就加1,向上回溯就-1 ,result代表最大深度,每次迭代跟depth比较然后更新。递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0。
2024-01-26 17:16:45
555
原创 代码随想录算法训练营第十六天|● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数
反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。**二叉树节点的高度:**指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)**二叉树节点的深度:**指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。遇到两个节点都为null时,直接返回深度即可。
2024-01-25 14:32:25
424
原创 代码随想录第十五天| ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树
注意上面最后一种情况,我没有使用else,而是else if, 因为我们把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。本题依然是层序遍历,只不过在单层遍历的时候记录一下本层的头部节点,然后在遍历的时候让前一个节点指向本节点就可以了。
2024-01-24 17:35:22
940
原创 代码随想录算法训练营第十二天|● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结
移除元素获取元素最小栈题目239. 滑动窗口最大值找一个最小栈储存先判断是否要pop 再push。push的时候需要把不应该要的都弹出347. 前 K 个高频元素这道题目主要涉及到如下三块内容:首先统计元素出现的频率,这一类的问题可以使用map来进行统计。然后是对频率进行排序,这里我们可以使用一种 容器适配器就是优先级队列。什么是优先级队列呢?其实就是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。而且优先级队
2024-01-22 23:36:49
900
原创 【代码随想录+力扣hot100】双指针
当遇到满足条件的情况时,快指针给慢指针赋值,慢指针向后移动一个位置,相当于指向了下一次要复制的地方,所以slow的位置是有效数据的后一个,如有效数据为2时,slow=2,前面0,1位置的数组有有效数据。第二个循环fast=2未遇到重复元素,循环时fast=2slow=2,循环后fast=3结束循环,此时slow已经移到之后的位置,因为slow是从1开始的,那说明初始时就认为第一个元素不重复,那么至少长度为1,则慢指针slow从0开始,快指针fast从1开始,每次slow和fast进行判断。
2024-01-22 03:11:28
1769
原创 代码随想录算法训练营第十一天|● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值
例如:4 + 13 / 5,这就是中缀表达式,计算机从左到右去扫描的话,扫到13,还要判断13后面是什么运算符,还要比较一下优先级,然后13还和后面的5做运算,做完运算之后,还要向前回退到 4 的位置,继续做加法,你说麻不麻烦!那么将中缀表达式,转化为后缀表达式之后:[“4”, “13”, “5”, “/”, “+”] ,就不一样了,计算机可以利用栈来顺序处理,不需要考虑优先级了。遇到右括号时,判断栈顶是否为对应的字符的右括号,相同弹出,不相同报错匹配失败。字符的左括号变成对应的右括号入栈,
2024-01-21 00:16:07
929
原创 代码随想录算法训练营第十天|栈与队列基础+队列模拟栈+栈模拟队列
如下面动画所示,用两个队列que1和que2实现队列的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。队列是先进先出的规则,把一个队列中的数据导入另一个队列中,数据的顺序并没有变,并没有变成先进后出的顺序。所以用栈实现队列, 和用队列实现栈的思路还是不一样的,这取决于这两个数据结构的性质。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要。,不涉及到具体算法,考察的就是对栈和队列的掌握程度。
2024-01-19 15:45:28
371
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人