- 博客(61)
- 收藏
- 关注
原创 算法训练营day70
三种情况:入度为2的时候,有两种情况一种是删哪个都行,另一种是删掉之后可能出现环,这时候就要判断删除这个边,是否成环了。如果没有入度为2,就是成环,这个从前向后遍历,通过查并集删除删除连通的即可。
2024-07-06 15:43:38 245
原创 算法训练营64-图论-深度优先优先搜索(dfs)-广度优先搜索(bfs)
【代码】算法训练营65-图论-深度优先优先搜索(dfs)-广度优先搜索(bfs)
2024-06-19 22:14:02 358
原创 算法训练题day57
不太一样,如果是连续的那代码就一样了,这里的区别就在于如果两个字符不相等,应该取max(dp[i - 1][j], dp[i][j - 1])这道题其实可以转换成寻找两个数组中不连续的子序列的最大长度,就和上题一样了。其实动态规划和贪心的本质上都是一样的。这道题的子序列是不连续的,所以很。
2024-06-12 11:55:50 171
原创 算法训练营day51
要搞明白dp数组的含义, dp数组包含两种情况,持有股票,这个可以持有之前的也可以持有今天的;不持有股票,可以是之前就不持有,也可以今天卖出。
2024-06-10 11:47:27 445
原创 算法训练营day48
当时爬楼梯只有 1,2两种情况所以可以用斐波那契数列做,当上楼的阶梯数为n时,可以抽象成完全背包问题,这里题目要求时排列,所以应该是先遍历背包,再遍历物品,这样 可以包含 1、2 和 2、 1。这里主要是物品没想白怎么表示,想的是根据n 把能取到的完全平方数列出来,再进行遍历,但是解法里的遍历就很巧妙。初始化没有想到,递推公式想到了。
2024-06-04 17:10:29 419
原创 算法训练营day46
完全背包和01背包的区别就是是否可以重复使用,在代码上就是 j 的 for 循环从前向后遍历还是从后向前遍历。先物品再背包是组合,先背包再物品是排列。
2024-06-01 17:07:23 257
原创 算法训练营day45
这道题主要的思路是把题目转换成分成两份,然后转换成一个重量为 sum / 2 的背包去装石头,尽可能将背包装的最大,那么最后最小省的石头就是 (sum - dp[j]) - dp[j] 前边是剩下的石头,后边是能装的最大的石头。
2024-05-31 13:59:51 303
原创 补签22day
二叉搜索树定义:左孩子小于节点,右孩子大于节点,且左右子树也符合 该规律。真的简单啊,其实整体思路没错,只是乱没想清楚。自己AC过了,确实对递归理解深入了一些。
2024-05-24 23:37:44 148
原创 算法训练营day37
这道题思路确实不难,想明白了就是固定思路,五块就收,十块收了找五块,二十这里注意,可以找 10 + 5 也可以 找 5 + 5 + 5 ,如果能都能找那就返回true, 否则就是false ,我这里用的是数组记录,其实用int 类型计数就可以了,ti。这里根据身高排序,有大到小,然后如果身高一样就 根据 k 由小到大,然后根据k进行插入相应的位置。
2024-05-23 17:08:58 180
原创 算法训练营36
代码随想录上的思路,让加油 - 耗油,如果所有的总和都<0 那肯定跑不完,然后用一个currsum 统计从 0 开始到当前i 的 剩余油之和,如果 < 0 说明 起始位置肯定在为 i + 1,然后currsum 置零,在重复上面操作,最后返回 start 就行。这道题从两边开始算就好,先从左向右只考虑右边小孩比左边小孩大,然后从右向左考虑,最后取两次糖果数组里大的,然后最后求和即可。根据通过情况反复挑战最终AC过了,这里和原来的差别是他的排序是用绝对值排序的,这样的思路会很简单。
2024-05-22 23:16:34 335
原创 算法训练营day35
贪心算法的思路是根据每个元素看能覆盖的大小,然后更新,更新的时候要取大的覆盖,如果能够覆盖最后的元素就返回true。贪心算法思路很简单,就是把每一天的利润都算出来,然后把整的加起来就是结果。
2024-05-22 21:18:35 335 2
原创 算法训练营day34
贪心算法的思路是,如果当前的和为负数的,就舍去这个和然后重新进行sum累加,同时用reslut记录局部最优,就是每次累加判断sum > max 如果大于就更新max。把大的饼干分给胃口最大的。暴力解法会超时,代码如下。
2024-05-22 16:46:10 222 1
原创 day32算法训练营
剪枝:每次sum > target就return 这已经算是剪枝了,但是剪枝不够彻底,因为约束了k个,所以也可以再for循环的条件是进行剪枝, i < = n - (k - path.size() ) + 1。这个去重是要对树层里的相同元素剪枝,树枝里不进行剪枝,剪枝可以通过比下标进行也可以定义一个数组 这里是 如果used[i - 1] = true证明是树枝,这时候可以选取相同的元素,如果used[i - 1]=false 证明是树层,这时候就要 continue剪枝了。
2024-05-19 19:07:56 566
原创 算法训练营day31
这道题主要就是注意 for 循环i从0开始,然后就是需要用used数组存储元素使用情况,然后used和path都要回溯。这里不能对元素进行排序,所以去重需要用一个 set来进行去重。
2024-05-18 20:31:29 108
原创 补签打卡day21
这个我还用最开始的思路,直接记录所有路径,然后把复合的再加入,但是这个相较于代码随想录上的算法,会多for循环去判断,可以直接在递归函数里加入 int sum 然后递减,如果 sum == 0证明找到了路径,就加入到结果里。递归算法的思路就是去找最大深度,然后深度变化之后就进行值得改变,因为顺序是按左右来的所以不用考虑最左边得值到底是深度最大得左子叶还是右子叶。代码随想录里的解法:通过判断叶子节点时sum 是否减到 0 同时,如果递归的时候路径之和== target 就一路返回true.
2024-05-16 21:28:22 328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人