![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 70
*MaybE
呃,猥琐发育(⊙o⊙)…
展开
-
代码随想录算法训练营第五十八天|108.冗余连接、109.冗余连接II
状态:还行思路:并查集可以解决什么问题:两个节点是否在一个集合,也可以将两个节点添加到一个集合中。原创 2024-07-19 18:53:24 · 97 阅读 · 0 评论 -
代码随想录算法训练营第五十七天|并查集理论基础、107.寻找存在的路径
并查集常用来解决连通性问题。就是判断两个元素是否在同一个集合里的时候,我们就要想到用并查集。步骤:初始化:father[]来存储每个节点的父节点,初始化时将父节点设为自己,father[i]=i查询:find(i),递归查找找i的祖先,找到了就返回祖先,否则不断往上找。合并:union/join(u,v),分别找到u的祖先和v的祖先,u=find(u),v=find(v),如果不是同一个,让u做v的祖先,father[v]=u。一句话,join(u,v)就是让u的祖先做v祖先的祖先。原创 2024-07-18 15:41:08 · 277 阅读 · 0 评论 -
代码随想录算法训练营第五十六天|110.字符串接龙、105、有向图的完全可达性、106.岛屿的周长
状态:用dfs搞了半天没整出来。原创 2024-07-17 23:30:01 · 278 阅读 · 0 评论 -
代码随想录算法训练营第五十五天|101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
状态:不会步骤1:将边界上的陆地变为海洋步骤2:计算孤岛的总面积。原创 2024-07-16 23:02:32 · 374 阅读 · 0 评论 -
代码随想录算法训练营第五十四天|99.岛屿数量 深搜、广搜、100.岛屿的最大面积
状态:不会。原创 2024-07-15 22:26:37 · 401 阅读 · 0 评论 -
代码随想录算法训练营第五十二天(图论)| 98. 所有可达路径、深度优先搜索、广度优先搜索
邻接矩阵是一种使用二维数组来表示图的方法。矩阵中的元素表示节点之间是否存在边。如果存在边,则对应的矩阵元素为1(或边的权重);否则为0。原创 2024-07-13 22:34:59 · 1066 阅读 · 0 评论 -
代码随想录算法训练营第五十一天|42. 接雨水、84.柱状图中最大的矩形
状态:不会可以使用双指针法也可以使用单调栈。在纵向求解中,我们将问题简化为在每个柱子的位置上能够存储多少水。使用双指针法时,我们分别从数组的两端向中间移动,维护两个指针和两个变量(左侧最大高度和右侧最大高度)。这种方法侧重于通过比较当前位置柱子的高度和其两侧最大高度的较小值来计算当前位置能够存储的水量。左右指针移动:从数组两端开始,通过比较左右指针当前位置的高度来决定移动哪个指针。更新最大高度:每次移动指针时,更新左侧和右侧的最大高度。原创 2024-07-12 22:47:21 · 285 阅读 · 0 评论 -
代码随想录算法训练营第五十天| 739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II
题目链接:状态:不会这道题需要找到下一个更大元素。使用栈来存储未找到更高温度的下标,那么栈中的下标对应的温度从栈底到栈顶是递减的。这意味着,栈顶元素的温度是当前温度数组中未找到更高温度的最高温度的下标。原创 2024-07-11 22:38:46 · 303 阅读 · 0 评论 -
代码随想录算法训练营第四十九天| 647. 回文子串、 516.最长回文子序列
状态:不会dp[i][j] 表示字符串 s 从索引 i 到索引 j 这一段子串是否为回文子串。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况:情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串情况二:下标i 与 j相差为1,例如aa,也是回文子串。原创 2024-07-10 23:04:01 · 403 阅读 · 0 评论 -
代码随想录算法训练营第四十八天| 115.不同的子序列、583. 两个字符串的删除操作、 72. 编辑距离
状态:不会dp[i][j] 表示在 s 的前 j 个字符中,t 的前 i 个字符作为子序列出现的次数。匹配的情况:1.当 s[j-1] 与 t[i-1] 匹配时,说明我们可以用 s[j-1] 来匹配 t[i-1],这种情况下,在 s 的前 j-1 个字符中找到的所有 t 的前 i-1 个字符作为子序列的组合数(dp[i-1][j-1])都可以作为当前组合的一部分。原创 2024-07-09 20:25:03 · 614 阅读 · 0 评论 -
代码随想录算法训练营第四十七天|1143.最长公共子序列、 1035.不相交的线、53. 最大子序和、392.判断子序列
状态:一开始没想明白为啥要 max(dp[i - 1][j], dp[i][j - 1])如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1;如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。原创 2024-07-08 19:06:22 · 335 阅读 · 0 评论 -
代码随想录算法训练营第四十五天| 300.最长递增子序列、 674. 最长连续递增序列、 718. 最长重复子数组
状态:不会,递推状态的时候只想着如何从dp[i-1]推导dp[i],没想过可能需要枚举dp[0-i]找出所有比自己小的数字的dp[j],在这些dp[j]中找到最大的,然后加1。也就是 j 从[0,i) 中 if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);原创 2024-07-06 17:03:42 · 308 阅读 · 0 评论 -
代码随想录算法训练营第四十四天|188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
状态:不会思路:在股票买卖1使用一维dp的基础上,升级成二维的即可。要注意: dp[j][0] = Math.max(dp[j][0], dp[j - 1][1] - prices[i]);dp[j - 1][1] - prices[i] 是因为买入股票的操作要用dp[j-1][1],也就是上次卖出去得到的钱来买这次的股票。原创 2024-07-05 19:07:26 · 669 阅读 · 0 评论 -
代码随想录算法训练营第四十三天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、 123.买卖股票的最佳时机III
状态:做出来了因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。每天的状态要么是持有股票要么是不持有,那么手头的钱就可以分为:dp[i][0]表示第i天持有当前股票的最大利润、dp[i][0]表示第i天不持有当前股票的最大利润。那么这个状态如何变化的呢?既然持有的话,说明第i-1天是持有且没有卖,或者第i-1天不持有,但是买入第i天的股票了。所以dp[i][0] = max(dp[i-1][0],-price[i])原创 2024-07-04 14:48:07 · 673 阅读 · 0 评论 -
代码随想录算法训练营第42天| 198.打家劫舍、213.打家劫舍II 337.打家劫舍III、 337.打家劫舍III
状态:不会可以从最后一间房子开始,每次面对一个房子要考虑打劫还是不打劫,如果打劫了就从它的下下个房子开始打劫,在这个过程中打劫还是不打劫可以组成一个二叉树。如图,val是索引然后这个过程中可以使用记忆化搜索来记录已经算过的值,从而实现剪枝。和上面的想法类似,决定dp[i]的因素就是第i房间偷还是不偷。原创 2024-07-03 15:25:46 · 397 阅读 · 0 评论 -
代码随想录算法训练营第四十一天| 322. 零钱兑换、279.完全平方数、139.单词拆分
状态:能想到凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],但没想到加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])所以dp[j] 要取所有 dp[j - coins[i]] + 1 中最小的。原创 2024-07-02 15:10:50 · 482 阅读 · 0 评论 -
代码随想录算法训练营第40天| 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
状态:不会思路:和494.目标和类似,这题属于组合问题,当我们有一个硬币coin时,对于每个金额j,通过添加这个硬币,我们可以把凑成金额j-coin的所有方法数加到凑成金额j的方法数中。这是因为每一种凑成 j-coin 的方法,加上硬币coin,都变成了一种凑成j的方法。原创 2024-07-01 19:02:19 · 293 阅读 · 0 评论 -
代码随想录算法训练营第三十八天|1049. 最后一块石头的重量 II、494. 目标和、 474.一和零
状态:没想到尽量让石头分成重量相同的两堆思路:尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了,和昨天的相同子集问题就类似了。原创 2024-06-30 13:30:51 · 691 阅读 · 0 评论 -
代码随想录算法训练营第三十七天|01背包问题、分割等和子集
状态:忘了。原创 2024-06-28 22:10:03 · 1049 阅读 · 0 评论 -
代码随想录算法训练营第三十六天|62.不同路径、 63. 不同路径 II、343.整数拆分(可跳过)、96.不同的二叉搜索树(可跳过)
状态:还行思路:当前状态的只有可能是从上面或者左边过来的,所以 dp[i][j] = dp[i-1] + dp[j-1]原创 2024-06-27 21:03:01 · 833 阅读 · 0 评论 -
代码随想录算法训练营第三十五天(dp)|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
状态:so easy思路:最简单的递归就不说了。使用动态规划的话,状态转移方程 dp[i] = dp[i - 1] + dp[i - 2]原创 2024-06-26 15:57:18 · 270 阅读 · 0 评论 -
代码随想录算法训练营第三十四天|56. 合并区间、738.单调递增的数字、968.监控二叉树
状态:无语,这题从右边界排序做不了!原创 2024-06-25 22:33:14 · 211 阅读 · 0 评论 -
代码随想录算法训练营第三十三天|452. 用最少数量的箭引爆气球、 435. 无重叠区间、 763.划分字母区间
状态:没想出来思路:对气球终点位置排序,从第一个气球终点位置射出箭,看这支箭可以尽可能穿过几个气球,如果遇到一个气球的起点在当前箭的终点之后,说明当前这支箭不能再穿过这个气球了,需要再射出一支新的箭,并将新的箭的终点设为当前气球的终点。原创 2024-06-24 18:03:37 · 362 阅读 · 0 评论 -
代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列
状态:so easy思路:每次遍历时,如果当前的油量差(currTank)小于0,说明从当前起点无法到达下一个加油站。此时,将下一个加油站设为新的起点,并重置当前油量差(currTank)。最后检查总的油量差(totalTank),如果总的油量差大于等于0,说明存在一个合法的起点,使汽车能绕完整个环形路;否则不存在。原创 2024-06-22 20:57:34 · 288 阅读 · 0 评论 -
代码随想录算法训练营第30天| 122.买卖股票的最佳时机II、55. 跳跃游戏、 45.跳跃游戏II、 1005.K次取反后最大化的数组和
文档讲解:代码随想录状态:so easy思路:不用考虑操作的次数,其实只要有赚就拿下就行了。原创 2024-06-21 19:20:59 · 254 阅读 · 0 评论 -
代码随想录算法训练营第29天(贪心)|455.分发饼干、376. 摆动序列、53. 最大子序和
状态:so easy思路:对胃口和饼干大小排序,小胃口对应小饼干,不满足的话用下一块饼干试探。原创 2024-06-20 22:07:28 · 410 阅读 · 0 评论 -
代码随想录算法训练营第28天|491.递增子序列、46.全排列、47.全排列 II、332、重新安排行程、51、N皇后、37、解数独
状态:没做出来,原因是在used数组去重的用法不对,used数组是结合sort使用的,本题求自增子序列。思路:局部去重 Set, 在每层递归调用中定义一个 Set,记录当前层级已经使用过的元素,避免重复使用。使用pre记录上次的值,确保不递减。原创 2024-06-19 19:58:57 · 437 阅读 · 0 评论 -
代码随想录算法训练营第二十七天|93.复原IP地址、 78.子集、90.子集II
状态:还行,判断字符是否有效卡了好久思路:通过回溯算法遍历所有可能的分割方式,每个IP地址段必须是0到255之间的整数且不能有前导零,当选满4个合法段且字符串用完时加入结果集,否则立即回溯。原创 2024-06-18 14:20:49 · 351 阅读 · 0 评论 -
代码随想录算法训练营第二十六天|39. 组合总和、 40.组合总和II、 131.分割回文串
状态:卡了一会儿思路:先排序,方便剪枝。允许数字重复使用,因此递归调用时传入当前索引i。原创 2024-06-17 15:24:23 · 159 阅读 · 0 评论 -
代码随想录算法训练营第二十四天| (回溯) 77. 组合、 216.组合总和III、17.电话号码的字母组合
状态:很多细节忘了思路:先画图,然后可以发现,从1到n中选择k个数,可以看成是一个递归过程,这个递归的深度就是k。然后遍历当前这层集合可以看作一个for循环,就是逐个元素尝试的过程。剪枝优化:画图时可以发现,有时for循环后面几个集合不满足条件可以提前结束。原创 2024-06-15 19:15:59 · 302 阅读 · 0 评论 -
代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、 108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树
状态:还可以思路:如果节点的值在[low, high]之间,则递归修剪它的左子树和右子树。节点值小于low:如果节点的值小于low,则修剪后的树不会包含这个节点及其左子树,直接返回修剪后的右子树。节点值大于high:如果节点的值大于high,则修剪后的树不会包含这个节点及其右子树,直接返回修剪后的左子树。原创 2024-06-14 11:37:59 · 202 阅读 · 0 评论 -
代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先、 701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点
状态:只会昨天的方法,没有想到利用二叉搜索树的性质。思路:如果当前节点的值同时小于 p 和 q 的值,说明 p 和 q 都在当前节点的右子树,因此继续在右子树中查找。如果当前节点的值同时大于 p 和 q 的值,说明 p 和 q 都在当前节点的左子树,因此继续在左子树中查找。如果当前节点的值在 p 和 q 之间(包括等于 p 或 q),那么当前节点就是 p 和 q 的最近公共祖先。原创 2024-06-13 16:17:21 · 265 阅读 · 0 评论 -
代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
题目链接:530.二叉搜索树的最小绝对差文档讲解:代码随想录状态:还可以思路:使用中序遍历来遍历二叉搜索树。在中序遍历过程中,比较当前节点和前驱节点的值,更新最小差值。返回二叉搜索树中任意两个节点值的最小差值。原创 2024-06-12 14:37:04 · 193 阅读 · 0 评论 -
代码随想录算法训练营第二十天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
状态:索引一开始没搞对卡了会儿。思路:每次递归找到最大值的索引,然后按照这个索引划分左子树和右子树。原创 2024-06-11 22:43:11 · 332 阅读 · 0 评论 -
代码随想录算法训练营第十八天| 513.找树左下角的值、112. 路径总和 、 106.从中序与后序遍历序列构造二叉树
状态:递归使用中右左顺序出错了,迭代却没事思路:需要找最大深度,然后使用中左右的遍历顺序找最左节点迭代题解:层次遍历最后一行第一个数即可。原创 2024-06-08 15:23:15 · 371 阅读 · 0 评论 -
代码随想录算法训练营第十七天| 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和
状态:还可以思路:计算左右子树的深度差,递归判断左右子树是否符合平衡条件。原创 2024-06-07 21:32:37 · 172 阅读 · 0 评论 -
代码随想录算法训练营第十六天| 104.二叉树的最大深度 、 111.二叉树的最小深度、 222.完全二叉树的节点个数
状态:so easy思路:左子树和右子树中取最大深度,依次往下递归。原创 2024-06-06 17:50:14 · 260 阅读 · 0 评论 -
代码随想录算法训练营第十五天| 102. 二叉树的层序遍历、226.翻转二叉树、101. 对称二叉树
状态:dfs没写出来,bfs不知道如何分层。原创 2024-06-05 15:26:58 · 294 阅读 · 0 评论 -
代码随想录算法训练营第十四天|二叉树递归遍历、迭代遍历、统一迭代
二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的去遍历。(后面讲)原创 2024-06-04 16:42:25 · 638 阅读 · 0 评论 -
代码随想录算法训练营第十三天|239. 滑动窗口最大值、 347.前 K 个高频元素
状态:忘了思路1:使用优先队列来维护滑动窗口中的最大值,确保在每次滑动时能够高效地找到最大值。时间复杂度是 O(n log k)。思路2:利用单调队列(一头进,一头出)模型滑动窗口。原创 2024-06-03 22:46:03 · 356 阅读 · 0 评论