- 博客(58)
- 收藏
- 关注
原创 代码随想录算法训练营总结篇
算法训练营里,每天的题型经常有些关联性,看完理论或者做完第一题,后面的经常能自己写出来或者至少有思路,很容易让人有成就感,也能建立起来整个算法的知识架构。总之还是很庆幸自己报了这个训练营,可能带来的帮助不是那种实质性的,但是在心理上肯定有巨大的推动作用,也通过代码随想录的群能接触很多同样在找工作的同学,这种比自己闷头学习来说带来的帮助是无法量化的。算法训练营结束了,找实习才刚刚开始。组里项目、实习、秋招、小论文、毕业论文后面还有很多事,希望自己都能像训练营这样,一天一天的积累,脚踏实地,做更好的自己!
2025-03-31 01:26:25
186
原创 代码随想录算法训练营第60天 | Bellman_ford 队列优化算法、bellman_ford之判断负权回路、bellman_ford之单源有限最短路
Bellman_ford 队列优化算法(又名SPFA)bellman_ford之单源有限最短路。bellman_ford之判断负权回路。
2025-03-31 00:59:57
257
原创 代码随想录算法训练营第59天 | dijkstra(堆优化版)、Bellman_ford 算法
dijkstra(堆优化版)精讲。Bellman_ford 算法精讲。
2025-03-31 00:56:57
175
原创 代码随想录算法训练营第50天 | 图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
【代码】代码随想录算法训练营第50天 | 图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础。
2025-03-27 18:31:40
105
原创 LeetCode Hot 100 - 矩阵 | 73.矩阵置零、54.螺旋矩阵、48.旋转图像、240.搜索二维矩阵II
新建两个boolean数组记录该行或列是否出现0,再使用数组更新矩阵。优化空间复杂度:使用矩阵的第一行和第一列当做数组记录,要提前利用两个变量将第一行或第一列是否有0进行记录,最后使用该变量对第一行和第一列进行处理。
2025-03-25 01:20:59
425
原创 LeetCode Hot 100 - 普通数组 | 53.最大子数组合、56.合并区间、189.轮转数组、238.除自身以外数组的乘积、41.缺失的第一个正数
贪心,和小于0就抛弃。
2025-03-24 01:32:11
215
原创 LeetCode Hot 100 - 子串 | 560.和为K的子数组、239.滑动窗口最大值、76.最小覆盖子串
前缀和+哈希表要查找的子数组为连续的,可以由两个前缀和计算得出,满足题目的条件为preSum[i] - preSum[j-1] = k,所以我们可以用哈希表记录前缀和出现的次数,在遍历到位置 i 时计算出preSum[i] - k ,查看哈希表中是否有对应值,若有则取次数加入结果。
2025-03-23 23:05:00
276
原创 LeetCode Hot 100:15.三数之和、42.接雨水、3.无重复字符的最长子串、438.找到字符串中所有字母异位词
先对数组进行排序,这样就能根据大小关系调整指针位置。以第一个数遍历,用双指针指向剩余数组的两端,求三数之和,根据结果调整指针位置。
2025-03-21 01:12:55
195
原创 代码随想录算法训练营第47天 | 739. 每日温度、496.下一个更大元素 I 、503.下一个更大元素II
利用单调栈,若求大于当前元素的右侧值,应该使用单调增栈。若当前元素大于栈顶元素,则弹出栈顶元素并记录两元素距离,将当前元素压入。若当前元素小于等于栈顶元素则压入栈。用map存数组1的值和位置,对数组2利用单调栈求每个元素有边第一个比其大的元素,在弹出元素时判断该元素是否在map数组中存在,若存在将结果保存到相应res位置。上述两种情况可以合并,因为最后都是将当前元素压入栈,而小于等于的情况没有操作,只有大于的情况要操作记录结果。二、496.下一个更大元素 I。三、503.下一个更大元素II。
2025-03-18 23:26:37
176
原创 LeetCode Hot 100:1.两数之和、49.字母异位词分组、128.最长连续序列、283.移动零、11.盛水最多的容器
哈希表的应用,哈希表可以快速查找是否存在某个值。需要索引要设为值,以数值为key,用containsKey()查找是否存在,用get()获取下标。可以将判断和放入元素的过程通过一个元素实现(同时能解决不能使用重复元素的问题)
2025-03-17 16:27:48
242
原创 代码随想录算法训练营第46天 | 647. 回文子串、516.最长回文子序列
【代码】代码随想录算法训练营第46天 | 647. 回文子串、516.最长回文子序列。
2025-03-16 23:15:44
316
原创 代码随想录算法训练营第45天 | 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
二、583. 两个字符串的删除操作 定义状态:创建一个二维数组 ,其中 表示 的前 个字符组成的子串和 的前 个字符组成的子串之间的编辑距离。 初始化状态: 当 为空字符串时, 转换为空字符串需要的操作次数就是 的长度,即 。 当 为空字符串时, 转换为 需要的操作次数就是 的长度,即 。 状态转移方程: 如果 的第 个字符和 的第 个字符相等,那么不需要额外的操作, 等于 。 如果不相等,则有两种操作方式可以选择: 删除
2025-03-16 22:22:53
180
原创 代码随想录算法训练营第44天 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
二、1035.不相交的线。
2025-03-14 23:25:10
197
原创 代码随想录算法训练营第43天 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
注意使用dp[i][j]来表示[i-1][j-1]位置处的最大重复子数组,否则需要考虑初始化。
2025-03-13 23:56:31
180
原创 代码随想录算法训练营第42天 | 188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
因为买出股票后有一天冷冻期,所以在更新买入股票的状态时要在-2的天数上。
2025-03-13 00:38:38
169
原创 代码随想录算法训练营第40天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
本题可以用贪心算法,因为不限制买卖次数,可以仅收集股票上涨的值。动态规划解法与上一题的不同就在于递推公式。两次交易,设置4个状态。
2025-03-11 23:08:03
144
原创 代码随想录算法训练营第39天 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III
dp[i]的意义为到第i个房子能偷到的最大金额,根据前一个位置偷或不偷来取最大值。注意要初始化dp0和1,首先要判断数组小于2的情况 原理一样,通过三个数记录递推过程 二、 213.打家劫舍II根据第一家不偷和最后一家不偷分成两种情况取最大值。自己的写法:答案中的解法三、337.打家劫舍 III后序遍历,用二维数组分别存偷当前节点和不偷当前节点。注意在当前节点不偷时,左右孩子偷不偷都可以,所以要分别取左右数组的最大值求和
2025-03-10 23:54:16
311
原创 代码随想录算法训练营38天 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包
求最小个数与遍历顺序无关,先遍历背包容量可以更好的给便利的完全平方数限定范围。完全背包问题、求的是组合、本题要求最少硬币数。
2025-03-10 01:20:36
207
原创 代码随想录算法训练营第36天 | 1049.最后一块石头的重量II、494.目标和、474.一和零
思路就是尽可能将石头分为重量相近的两份,相当于是背包问题尽可能填满(target = sum/2)的背包,石头的重量和价值相同。关于结果我的理解是:dp[target]是我们找到尽可能满足target的石头重量(因为第二层循环起点,所以一定小于等于target),那可以粉碎的重量就是2×dp[target],结果就是sum减去粉碎之后的剩余。
2025-03-08 23:12:59
290
原创 代码随想录算法训练营第32天 | 动态规划基础理论、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
从0或1处开始,说明走到0或1的花费都是0,后面每一步 是前两个位置的(历史花费加上迈出这一个台阶的花费)的最小值。
2025-03-04 21:39:27
304
原创 代码随想录算法训练营第31天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树
和昨天题一样的套路,以左边界排序,比较当前区间左边界和上一区间右边界(i初始为1,区间0的边界被设为begin和end的初始值)。当有重合,更新右边界的值(max比较)。无重合则将前一个区间加入集合,更新begin和end为当前区间。
2025-03-03 18:02:06
214
原创 代码随想录算法训练营第30天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
统计每一个字母出现的最后位置记录到与字母映射关系的数组中,遍历字母串,用right记录字母出现的最后位置的最大值,当遍历到该值说明可以分割了,分割长度为right-left+1,left用来记录每段分割的字母串的起始位置。判断第二个气球起始位置和第一个气球的结束位置,如果有交叉,将第二个气球的结束位置,改为两个气球结束位置的最小值(实际上是用来射这两个气球的最靠后位置),这样和下一个气球的起始位置再比较。
2025-03-02 22:03:05
221
原创 代码随想录算法训练营第29天 | 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
用一个totalSum记录全程油量剩余,如果小于0则不能跑完全程,返回-1。对于能跑完的情况,我们从0开始计算curSum,一旦curSum小于0,说明前面跑不完,就从i+1重新开始,这个更新过程可能重复多次,前面多段和为负的话就说明后面多余的油量很多。当我们某个加油站处和为负时(假设为n),前面是不可能存在起点的,因为如果中间某处m到n的和为正数的话,那0到m一定是负数,这种情况肯定我们已经更新过一次 m+1为起点,这样和假设是矛盾的,不成立。
2025-03-01 22:41:08
143
原创 代码随想录算法训练营第28日 | 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II、1005.K次取反后最大化的数组和
【代码】代码随想录算法训练营第28日 | 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II。
2025-02-25 23:34:38
274
原创 代码随想录算法训练营25天 | 491.递增子序列、46.全排列、47.全排列 II
【代码】代码随想录算法训练营25天 | 491.递增子序列、46.全排列、47.全排列 II。
2025-02-21 23:31:00
234
原创 代码随想录算法训练营第22天 | 回溯算法理论基础、77. 组合、216.组合总和III、17.电话号码的字母组合
再来看一下参数,因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。什么时候达到了终止条件,树中就可以看出,一般来说搜到叶子节点了,也就找到了满足条件的一条答案,把这个答案存放起来,并结束本层递归。在上面我们提到了,回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。在回溯算法中,我的习惯是函数起名字为backtracking,这个起名大家随意。,是的,我指的是所有回溯法的问题都可以抽象为树形结构!
2025-02-18 23:04:24
419
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅