- 博客(48)
- 收藏
- 关注
原创 代码随想录算法训练营第58天 [101.孤岛的总面积 102.沉没孤岛 103.水流问题 104.建造最大岛屿]
思路:从四个边缘开始深搜,搜到了标记为2,这样所有为2和0的就不是孤岛,所有为1的就是孤岛,最后把2变为1,把1变为0。思路: 某个点能不能流到第一组边界和第二组边界 转化为 第一组边界和第二组边界能不能流到某个点。思路:给不同的岛屿标记不同的编号mark,再遍历所有为海水的区域将其变为陆地,计算联通起来的最大面积。思路:从四个边缘开始深搜,搜到了标记为2,这样所有为2和0的就不是孤岛,所有为1的就是孤岛。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-07-08 18:26:06 300
原创 代码随想录算法训练营第56,57天 [卡玛网98. 所有可达路径, 卡玛网99. 岛屿数量,卡玛网100. 岛屿的最大面积]
思路:邻接矩阵和邻接表两种方法。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-07-04 00:20:07 271
原创 代码随想录算法训练营第55天 [ 42. 接雨水 84.柱状图中最大的矩形]
思路:找到左边第一个小于我的和右边第一个小于我的,区间左右都要添加一个0,防止单纯的递增heights或者单纯递减的heights没办法收集答案。思路:找到左边第一个大于我的和右边第一个大于我的。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-07-01 22:49:37 240
原创 代码随想录算法训练营第53天 [ 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II ]
思路:可以模拟遍历两次,每次的i都取 i%nums.size()思路:用map记录nums1里值和下标的关系。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-07-01 16:03:16 317
原创 代码随想录算法训练营第51天 [115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离 ]
相等的时候 dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]思路:dp[i][j] 以t[j-1]为结尾的字符串在 以s[i-1]为结尾的字 符串出现个数。不相等的时候 dp[i][j] = dp[i - 1][j];思路:看注释,不相等的时候的增、删、改。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-07-01 01:09:15 301
原创 代码随想录算法训练营第50天 [1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列 ]
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j],如果text[i-1] == text[j-1]. dp[i][j] = dp[i-1][j-1]+1 从左上角推导而来。思路:dp[i] = max(dp[i-1]+nums[i],nums[i])做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。思路:和上一题差不多。
2024-06-30 18:26:02 189
原创 代码随想录算法训练营第一天 [300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组]
设计为i-1,初始化的时候会方便很多,dp[0][j] 和 dp[i][0]其实是没有意义的,如果第一个数相同dp[1][1] = dp[0][0]+1 并且dp[1][1] = 1,所以把dp[0][0]初始化为0。思路:dp[i] 以nums[i]为结尾的递增子序列最大长度,下标为i的数,需要和下标为0开始一直到下标为i-1的数去做比较。dp[i][j] 以nums1[i-1] 和nums[j-1]为下标的最长公共子序列长度为dp[i][j]**一、300.最长递增子序列 **
2024-06-30 17:02:02 199
原创 代码随想录算法训练营第48天 [188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费]
0 :持有股票状态(持续持有/前一天买了) 前一天有可能是【持续不持有状态1】 或者【冷冻期状态3】思路:最多k笔交易,也就是最多买卖2k次,奇数次都是买,偶数次都是卖。1 :不持有股票状态 (持续不持有/前2天卖了,渡过一天冷冻期)思路:每次卖出的时候扣掉手续费就好了。2 :不持有股票状态 (今天卖出)思路: dp[i][j]3 :今天是冷冻期,持续一天。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-30 15:17:39 203
原创 代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ]
思路:dp[i][0] 第i天持有股票的最大利润 dp[i][1] 第i天不持有股票的最大利润。思路:因为是多次买卖,所以每次买卖前要考虑前一天持有状态。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-22 16:18:24 348
原创 代码随想录算法训练营第45天 [ 198.打家劫舍 213.打家劫舍II 337.打家劫舍III ]
思路:要么第一家和最后一家都不偷,要不只偷第一家,要不只偷第二家(后面两种情况的答案包含了第一种情况)思路:递归的时候返回本层的dp数组。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-22 01:54:22 263
原创 代码随想录算法训练营第44天 [ 322. 零钱兑换 279.完全平方数 139.单词拆分]
递推公式 dp[j] = min(dp[j] ,dp[j-coins[i]] + 1)dp[n] 表示 n的完全平方数的最少数量为dp[n] 因为是最少数量。dp[i] 下标为i的 背包 所需硬币的最小值为 dp[i]如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。递推公式 dp[j] = dp[j-i * i]+1;做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。无限使用-> 完全背包。
2024-06-21 21:14:17 360
原创 代码随想录算法训练营第43天 [完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼梯]
思路:完全背包应用 求多少种的递推公式时 dp[j] += dp[j - weight[i]],初始化dp[0] = 1。思路:完全背包应用,求多少种的递推公式时 dp[j] += dp[j - weight[i]],初始化dp[0] = 1。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-20 01:39:13 396
原创 代码随想录算法训练营第42天 [1049. 最后一块石头的重量 II 494. 目标和 474.一和零]
所以转化为 重量之和的一半 target容量的背包,尽可能装满,石头的重量和价值都是stones[i]思路:石头相撞重量最小,最小的情况就是刚好分为两组大小相同的,这样相撞后重量就为0。数组元素中的和为sum,数组元素加了符号后的和为targeet。思路:一共有str种物品,要同时满足m个0的背包和n个1的背包。递推公式 dp[j] += dp[j-nums[i]]dp[j] 表示容量为j的背包,有dp[4]种方式。dp[j] 容量为j的背包最大重量为dp[j]做题状态:看解析后做出来了。
2024-06-18 20:59:03 284
原创 代码随想录算法训练营第41天 [01背包的理论基础,二维数组解法,一维数组解法,416. 分割等和子集]
思路:dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能达到的最大价值,递推公式为 dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]]+value[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])做题状态:看解析后做出来了。
2024-06-17 23:46:34 200
原创 代码随想录算法训练营第39天 [ 62.不同路径 63. 不同路径 II. 343. 整数拆分 96..不同的二叉搜索树]
思路:1.障碍物的点dp[i][j]=0 2.初始化的时候,如果遇到障碍物了,如果是上面一层,那障碍物右边初始化都是0,如果是左边一列,那障碍物下面都是0。思路:一共n个数,从1开始,以1为头节点—以n为头节点,假设头节点为j,那么左子树个数为j-1,右子树个数为i-j。只能从左边或者从上面走过来 所以dp[i][j] = dp[i-1][j] + dp[i][j-1]所以就会有 dp[j-1]*dp[i-j]个。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-16 16:28:28 193
原创 代码随想录算法训练营第38天 [ 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯]
5.举例看看递推公式满不满足。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。1.明确dp数组的含义。3.dp数组的初始化。
2024-06-14 20:31:37 342
原创 代码随想录算法训练营第37天 [ 435. 无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 ]
思路:更新区间,可以合并的区间放在vector里,不能合并的push到result中。思路:数字如果是单调递减的,那前一位-1,当前位标记一下,遍历完后再把标记的都设为9。思路:用数组记录字母出现的最大下标,再定义left和right去求范围。**四、738.单调递增的数字 **做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-14 01:24:23 520
原创 代码随想录算法训练营第36天 [860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球 ]
思路:如果有重合,那就更新下一个点的右边界(当前点右边界和下一个点有边界的最小值)思路:十块只能找五块,二十能找十块五块和三个五块,优先消耗十块。思路:先按照身高排序,后再确定有几个比我高的顺序。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-13 01:51:07 383
原创 代码随想录算法训练营第35天 [1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果 ]
思路:算出每个点的油耗差值,累加,如果为负数了,说明这一点和这一点之前的点都不能作为起点,只能从这一点网后再做累加再找。思路:绝对值排序,先把绝对值大的负数变为正数,如果k还不为0,再去让绝对值最小的数去变化。要注意的是左边的比右边大,那么左边的结果要依赖右边的结果,所以要先遍历右边->倒序遍历。右边的比左边的大,所以右边的结果依赖于左边的结果,所以先遍历左边 -> 正向遍历。思路:不能又顾左又顾右,先考虑左边比右边大,再考虑右边比左边大。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-11 00:48:30 210
原创 代码随想录算法训练营第32天 [122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II ]
思路:设置可以走到的最远距离,走到最远距离的过程中一直更新最远距离,如果大于终点就return true。思路:遍历数组,每一天减去前一天的,为正就累加起来,就是最大利润。思路: 不需要管怎么走的,只需要一直更新最远可以走到的位置。最远的位置走不到终点,那我步数就+1,更新终点。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-10 17:08:24 265
原创 代码随想录算法训练营第31天 [455.分发饼干 376. 摆动序列 53. 最大子序和 ]
思路:遍历累加,更新累加的最大值,如果累加到的是负数就舍弃累加的值,再重新开始累加,思路:记录差值数组,遇到一个符号相反的就记录。思路:贪心,最大的饼干优先满足胃口最大的。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-10 15:22:52 227
原创 代码随想录算法训练营第30天 [332.重新安排行程 51. N皇后 37. 解数独 ]
做题状态:只能把js代码的解析看一遍先了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。思路:回溯(二位回溯)
2024-06-08 19:45:07 230
原创 代码随想录算法训练营第29天 [491.递增子序列 46.全排列 47.全排列 II]
思路:也是用uesd数组,但是不是用来判断这一层相等的元素,而是判断自己有没有使用过,排列不能用start_index。思路:无法对原数组排序,所以不能用原来的used数组方法,可以用map来存数字有没有使用过。思路:既有经典used数组处理方式,也有上一题的处理方式。为什么这里不能用491.递增子序列的处理方式呢?判断元素有没有使用过,重复元素的判断会有问题。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-06-05 23:07:08 235
原创 代码随想录算法训练营第28天 [93.复原IP地址 78.子集 90.子集II ]
思路:模板题,注意递归终止条件。做题状态:看解析后做出来了。做题状态:看解析后做出来了。思路:回溯,used数组。思路:和分割回文串类似。
2024-06-04 21:58:18 160
原创 代码随想录算法训练营第27天 [39. 组合总和 40.组合总和II 131.分割回文串]
思路:模板题,需要加深对start_index的理解。思路:树枝去重和树层去重,使用used数组。做题状态:看解析后做出来了。做题状态:看解析后做出来了。切割问题可以抽象为组合问题。做题状态:看解析后做出来了。在递归循环中如何截取子串。切割问题中递归如何终止。
2024-06-03 21:43:22 303
原创 代码随想录算法训练营第23天 [ 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 ]
思路:因为是二叉搜索树,中序遍历左中右是递增的数组,倒过来右中左就是递减的数组,再用双指针。思路:按照 (从中序和后序确定二叉树)的方法来做就好了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-05-30 19:53:37 361
原创 代码随想录算法训练营第22天 [235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 ]
(1) 把节点左子树 全部放到 节点右子树 的 最左下的节点 下 此时return root->right。(2) 把节点右子树 全部放到 节点左子树 的 最右下的节点 下 此时return root->left。4.节点右子树不为空,左子树为空,那就把右子树直接接上来, return root->right。3.节点左子树不为空,右子树为空,那就把左子树直接接上来, return root->left。如果key比当前节点小,说明要向左 返回的节点也接在root->left上。
2024-05-29 22:19:12 297
原创 代码随想录算法训练营第21天 [ 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先]
思路:方法1:遍历二叉树,用map记录,再对map排序(怎么对map中的value排序?) 方法2:因为是类二叉搜索树,所以众数肯定是二叉树连在一起的节点,用上一题类似的想法,两个指针。思路:用两个指针,关键是 pre = cur;思路:将左右节点的结果向上返回,用后序遍历。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-05-28 18:49:25 292
原创 代码随想录算法训练营第20天 [654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树 ]
思路:利用中序遍历,如果是二叉搜索树,那么遍历出来的结果的数组肯定是单调递增的。我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。2.不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。思路:和用后序+中序遍历确定二叉树的题目有点相似。1.二叉搜索树中不存在相同大小的节点。思路:需要利用到二叉搜索树的特性。做题状态:看解析后做出来了。做题状态:看解析后做出来了。思路:同时操作两个二叉树。
2024-05-27 21:47:28 353
原创 代码随想录算法训练营第十八天 [513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树]
1.确定终止条件 如果是叶子节点,并且count == 0 return true 如果是叶子节点,count!6.递归(左中序,左后续),得到左子树 node->left = 递归(左中序,左后续)7.递归(右中序,右后续),得到右子树 node->left = 递归(右中序,右后续)2.递归,回溯 到下一层的时候减去下一层的val,回溯的时候再加上。做题状态:和上一题类似,回溯的时候要把数组的内容也回溯了。1.确定递归的终止条件,后序数组大小为0,返回空间点。做题状态:看解析后做出来了。
2024-05-25 20:33:21 521
原创 代码随想录算法训练营第十七天 [110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 ]
思路:判断左右节点的高度差是不是大于1,上一层的高度是他左子节点的高度和右子节点的高度最大值+1,因为需要一层一层向上传递高度,所以是后序遍历,左右中。思路:弄清左叶子的定义,找左叶子需要找到他的父节点,否则无法判断叶子节点是不是其父节点的左节点。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-05-24 19:42:33 415 1
原创 代码随想录算法训练营第十六天 [104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数]
思路:完全二叉树中肯定会存在满二叉树,满二叉树的节点个数为 2^n - 1,n为深度。思路:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。思路:根节点的高度就是二叉树的最大深度。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。思路:和上一题差不多。
2024-05-23 23:21:29 549 1
原创 代码随想录算法训练营第十五天 [层序遍历,翻转二叉树,对称二叉树]
思路:翻转的时候注意下前中后序的区别。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:学习层序遍历后做出来了。做题状态:看视频后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-05-23 00:10:35 636
原创 代码随想录算法训练营第十四天 [递归遍历 迭代遍历 统一迭代]
做题状态:看解析后做出来了。做题状态:看解析后做出来了。思路:加入空节点做标记。
2024-05-21 23:54:16 485 1
原创 代码随想录算法训练营第十三天 [239. 滑动窗口最大值 347.前 K 个高频元素]
一、239. 滑动窗口最大值二、347.前 K 个高频元素三、栈和队列一些总结
2024-05-20 23:03:52 721 1
原创 代码随想录算法训练营第十一天 [20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值]
----------如果出现遇到右边括号时,栈已经空了 或者 右边括号不等于栈顶的括号,说明不匹配了。思路:先全部加入栈中,如果和栈顶元素相等,就pop掉,最后再将栈的元素转化为字符串并反转。-----------遇到一个左边括号,就往栈里加入一个右边括号。-----------遇到一个右边括号,就从栈顶删除一个括号。-----------如果遍历完s,栈里还有元素,也不匹配。思路:逆波兰表达式就是用栈来实现的。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-05-18 14:50:55 709
原创 代码随想录算法训练营第十天 [ 232.用栈实现队列 225. 用队列实现栈]
思路:使用一个队列,可以把元素拿出来后再放进队列中。做题状态:看解析后做出来了。做题状态:看解析后做出来了。
2024-05-17 21:04:30 392
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人