自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 代码随想录算法训练营Final Day|| 感想总结篇+个人介绍和规划

由于代码基础很薄弱,很多普通的语法都是通过卡玛网教材重新复习的,一边做算法题,一边巩固语法,在最开始的几周,甚至每天下班回家,还要花三到四个小时,写到十一点十二点,才能做到不看解答完整地写完所有题目。还依稀记得三数之和,四数之和折磨了我许久。由于经济原因选择欧陆(因为便宜...)不多赘述,一开始考虑了留在法国工作,所以几年前申请了工程师学校,但是在临近毕业时我才发现问题,工程师学校的QS排名实在是太低了,再加上慢慢更倾向于回国卷了,出于学历焦虑,申请了和我本校有合作的米兰理工大学双学位(QS120左右)。

2024-08-08 07:15:12 651

原创 代码随想录算法训练营Day62|| 图论part11

算是一刷结束了,图论纯走马观花,晚点写个小总结吧。Floyd 算法和Astar算法。

2024-08-07 06:43:33 256

原创 代码随想录算法训练营Day61 || 图论part 10

Bellman_ford 队列优化算法: 又叫做SPFA, 在做松弛操作时,只更新以目前操作节点为出发点能到达的节点的minDist,避免多余操作。判断负权回路:如果有负权回路,进行第n次松弛的时候,minDist数组会有变化。最多经过k个城市,那么就对所有边进行k+1次松弛即可。

2024-08-06 05:44:11 214

原创 代码随想录算法训练营Day59 || 图论part 09

Bellman_ford算法精讲,卡玛网94题:变化在于权值出现了负数,用动态规划思想来维护MinDist数组。核心在于对所有边进行n-1次松弛处理,就可以得出起始点到所有节点的最短路径。dijkstra算法(堆优化版):利用小顶堆来减少一层for循环。因为要存储边的权值,邻接表里就需要存pair了。图论章节主打一个走马观花属于是。

2024-08-05 03:24:42 252

原创 代码随想录算法训练营Day58 || 图论part 08

拓扑排序--卡玛网117软件构建:核心思想是找到入度为0的节点,然后将其移除,如此反复,知道所有节点被移除。删除节点的过程其实是,把被删除节点作为出发点所连接的节点的入读都减一。dijkstra(朴素版)精讲--47参加科学大会: 和prim算法类似,minDist数组不断更新每个节点到源节点的最短距离。同样是代码能看懂,但是自己手写不来,只能一步步抄。图论都是理解还ok,代码真得花时间熟悉啊。

2024-08-03 05:13:28 207

原创 代码随想录算法训练营Day57|| 图论part06

Prim算法,卡玛网53寻宝:最小生成数的prim算法三部曲。不要不断维护minDist数组,不断遍历该数组,把离树最近的点加入树。记录边的时候有特殊的技巧。kruskal算法:看思路的时候就想到的并查集来判断两点是否在同一个集合。先把边按照val排序,之后判断是否要加入树。代码都能看懂,自己写肯定还是困难。

2024-08-02 03:04:52 261

原创 代码随想录算法训练营Day56|| 图论part06

卡玛网109冗余链接II:这题的复杂度直接上升了一百个档次,需要准备许多函数待调用。思路必须得极其清楚。第一遍看下来理解了,自己写肯定写不出来,需要看好几遍的题。卡玛网108冗余链接:每输入一条边,检查两个节点是否在同一集合中,如果已经在了,就说明这条边是多余的,直接输出。(如果加入这条边就一定成环了)

2024-08-01 04:21:42 227

原创 代码随想录算法训练营Day55|| 图论part05

寻找存在的路径:就是并查集的基础应用题,source和destination的根一致则表示有路径。注意,这是个无向图。注意要理解每个函数,尤其是路径压缩的内容,其实不难,但是需要时间消化。建议理解后直接背板。

2024-07-31 04:46:44 222

原创 代码随想录算法训练营Day54|| 图论part04

算是一题简单的基础题,可以用来巩固邻接表的写法。从节点1开始,把所有能访问到的节点全都标记为true,继续深度搜索。卡玛网106岛屿的周长:这题即不需要深搜,也不需要广搜,题中给出了只有一个岛屿,从陆地的点开始朝四个方向走,遇到水了就说明有一条边,遍历所有的陆地,计算遇到水的次数即可。思路二是计算相邻岛屿的数量来计算边数。卡玛网110字符串接龙:相当于求无向图的最短路径,广搜最合适,因为广搜第一次找到路径一定最短。广搜就要利用队列,代码是能看懂的。能理解就很花时间了,先看懂逻辑和代码,关键基础部分写写吧。

2024-07-30 04:50:39 338

原创 代码随想录算法训练营Day52|| 图论part03

卡玛网101.孤岛的总面积:注意题目中孤岛的定义,孤岛必须在矩阵内部,因此必须先处理矩阵外部一圈的陆地,再把count初始化为0,再开始处理。注意,矩阵内部两块连在一起的陆地也叫做孤岛。卡玛网102.沉没孤岛:和上面一题类似,先处理矩阵边缘的陆地,把陆地特殊标记为2,之后把内陆为1的陆地全都变成0,把特殊标记的2换成1即可。卡玛网103.水流问题和卡玛网104.最大岛屿还有优化技巧需要看。补了上次岛屿最大面积的代码。图论学起来慢了好多。

2024-07-28 22:18:23 233

原创 代码随想录算法训练营Day51||图论part02

岛屿数量深搜版(dfs):递归函数的写法,遇到一个陆地后深搜,标记附近所有搜索过的陆地。还需要定义一个方向二维矩阵。看了好久才看懂代码。文章写得有点简单了,硬啃。岛屿数量广搜版(bfs):类似迭代法,需要注意一个非超时写法,在把元素加入队列的时候标记为true避免重复加入。卡玛网100岛屿的最大面积:代码和上面几乎一样,但是需要熟悉一下,目前还不能完整从头写到尾。没有视频,硬啃文章,感觉有点走马观花了。

2024-07-27 06:09:58 224

原创 代码随想录算法训练营Day50||图论part01

卡玛网98.所有可达到路径:和力扣797.所有可能的路径一致。邻接表和邻接矩阵的写法都要掌握。先写了一遍邻接矩阵写法,算是先熟悉了一下代码。先熟悉一些图论基础,以及搜索理论基础。深度优先搜索理论基础类似于回溯算法(递归法),广度优先搜索就类似于迭代法。深度搜索三部曲也和回溯算法类似。昨天的题补完啦~最后熟悉了一下单调栈。今天开始没视频看了,只能啃文字了。

2024-07-26 05:46:24 246

原创 代码随想录算法训练营Day49||单调栈part02

84.柱状图中的最大矩形:和接雨水区别在于,求相邻比自己小的元素,一个一个求矩形面积。由于题目的特殊性,还需要首位加0。思路get了~代码明天写吧~42.接雨水:单调栈的终极题目,理解思路后自己写还是有些小错误,注意避免非法操作。今天先这样,单调栈提比较少,后面图论只能啃文字了。

2024-07-25 06:18:09 233

原创 代码随想录算法训练营Day48||单调栈part01

503.下一个更大的元素II: 第一个求解思路是在数组后面重新接一个一样的数组来模拟环。设计到成环的思路,都可以利用取模法。注意把i都换成i%size以避免在求nums[i]的时候越界。739.每日温度:单调栈能处理的问题注意就是找到靠左或靠右第一个比它大或小的元素。单调栈如果递增,则是求第一个比它大的数;递减则是求第一个比它小的数。理解了实现的过程之后,没有什么难的地方,甚至都没有真的写实现单调栈的代码。469.下一个更大的元素:求那个数组左/右边最大的元素,就遍历哪个数组。

2024-07-24 04:57:08 212

原创 代码随想录算法训练营Day47||动态规划part13

516.最长回文子序列:这题也不难。第一次看题解的时候很疑惑,万一 i+1不小心大于j-1了怎么办,后来一想,反正这个值为0,加2之后刚好是2,正好是需要的结果,竟然完全不影响,所以不用处理这个问题。除此之外,遍历顺序和上一题一样,理解之后也是一遍过。647.回文子串:dp数组的定义方式很有技巧性,相应的,遍历顺序也是需要注意。今天累了,动态规划总结就先不写了,完结撒花。注意字串一定要连续,子序列可以不连续。

2024-07-23 05:17:52 233

原创 代码随想录算法训练营Day45||动态规划 part 12

583.两个字符串的删除操作:同样两个难点:递推公式的理解+初始化。终于开始慢慢学会根据定义初始化数组了。还有遍历的时候注意边界时<=size。115.不同的子序列:开始有点难度了,递推公式如何删除元素需要注意,如何初始化也是个小难点。72.编辑距离:已经学会举一反三了,这题就是上面那题改了一行代码,描述了替换操作。

2024-07-21 20:29:00 232

原创 代码随想录算法训练营Day44||动态规划 part 11

1143.最长公共子序列:关于两个数组的子序列问题,通常是定义二维dp数组,并且为了简化初始化,dp[i][j]往往对于i-1和j-1的下表。和上一题718最长重复子数组很类似,区别在于子序列可以不连续,如果比较中字符不相等,要继承dp[i][j-1]的值或者dp[i-1][j]的值。动态规划思路更好理解,注意这题的dp数组定义是包括了i这一位元素的,因此最好的result需要遍历出数组中最大的值,是个易错点。区别在于在发现元素不同时,只需要删除较长的数组里的元素,保留较短数组的元素。

2024-07-20 04:22:11 184

原创 代码随想录算法训练营Day43||动态规划part10

300.最长递增子序列:要注意dp数组的定义,dp[i]指包括nums[i]的最长子序列长度,因此最后的result是dp数组里元素的最大值。其次,初始化要注意,所有元素初始化为1,因为最起码升序数组可以包含元素本身。718.最长重复子数组:最难的部分在于定义dp数组,是我想不到的定义方式了。之后的递推公式,初始化,遍历顺序,都很容易理解。674.最长连续递增序列:达成不看视频就解答的成就。仅仅就是把递推公式逻辑变成,当前元素大于前一个元素即可。

2024-07-19 04:59:18 227

原创 代码随想录算法训练营Day42||动态规划part09

动态规划解法最关键在于拆分状态,基本状态有持有股票和不持有股票,可以衍生为第k次持有和第k次不持有,理解好各个状态之间的递推关系,就能解决问题。309.买卖股票的最佳时机含冷冻期:需要具体分为四个状态,最主要在于拆分“不持有股票/卖出股票”这个状态,以便在数组中展示出冷冻期的操作。714.买卖股票的最佳时机含手续费:基本就是买卖股票II的变换,在递推公式里扣除手续费即可。188.买卖股票的最佳时机IV:就是把买卖股票III换成了更加通解的模式,想清楚递归和初始化的逻辑,注意二维dp数组大小不要定义反即可。

2024-07-18 04:26:42 251

原创 代码随想录算法训练营Day41|| 动态规划part08

121.买卖股票的最佳时机:可以暴力for循环两层,也可以使用贪心算法,每次左边取最小的数,右边取尽量最大的数。由于只能购买一次,一旦持有股票,要么是首次买入,值为-prices[i],要么是维持前一天。这个点会体现和其他股票题的区别!123.买卖股票的最佳时机III: 规定了只能买卖两次,因此要确立四个不同状态:第一次持有,第一次不持有,第二次持有,第二次不持有,反复维护这4个数,是个n*4的数组。和股票I的区别在于可以多次购买,唯一需要改动的就是每天持有股票的现金数和前一天不持有股票的现金数有关了。

2024-07-17 06:05:00 363

原创 代码随想录算法训练营Day40|| 动态规划part07

337打家劫舍III: 暴力解法+记忆化递归方法先跳过。本题综合了二叉树的遍历和动态规划,经典的二叉树后序遍历,状态一步一步向根节点转移,理解思路之后代码一遍过,本质不难。多重背包:相比零一背包和完全背包就是限制了物品的数量。实际上把规定了数量的物品拆开成单独的物品就直接转化成了零一背包问题,面试时不会考,暂时不看了。213打家劫舍II: 可以去头去尾计算两个result取最大值,转换为基础打家劫舍问题。198打家劫舍:理解了递推公式后非常简单!今天打家劫舍学得有点顺捏。

2024-07-16 03:30:45 221

原创 代码随想录算法训练营Day38||动态规划part06

139.单词拆分:可以用回溯算法章节分割回文串的暴力搜索方式。这题必须先遍历背包再遍历物品,因为所求结果和排列有关。这题类似背包问题,但是很多不一样的地方。看了答案的for循环能看懂,但是写不出。322.零钱兑换:完全背包之装满一个背包的最少物品件数是多少。由于取最小值,数组初始化时,除了dp[0]都初始化为最大值。遍历顺序和组合排列无关,先遍历哪个都可以。注意顺序是从前到后,是一维数组的正常从前往后递推。279.完全平方数:和上面一题本质一模一样。多重背包和总结篇放下一篇文章吧。

2024-07-14 20:39:35 223

原创 代码随想录算法训练营Day37||动态规划part05

474.一和零:本质上是把背包的重量变成了“二维”,即既要考虑重量A,也要考虑重量B,同时物品的重量也是二维。卡玛网57爬楼梯:力扣爬楼梯进阶版,从每次只能爬1到2级台阶变成了可以爬1,2,3....m级台阶,问爬到n级台阶有几种方法。本质还是排满n级台阶有几种方法。518.零钱兑换II: 即装满价值为j的背包有几种方法,和494目标和几乎一致,只不过换成了零一背包。377.组合总和IV:和上一题的区别就是求的是排列的集合。初识完全背包,和零一背包的区别就是要正序遍历背包,从而让物品可以反复使用。

2024-07-13 04:00:39 377 1

原创 代码随想录算法训练营Day36||动态规划part04

其次,就是数组中只包含0,target也为0, 假如只有一个0,dp[0]也会累加一次得到2,和实际相符。假如有多个0,例如有2个0, 写成二维数组就是1,2,4一列,一维数组也是,每次循环dp[0]都会翻倍,数组中有0个零就会有2^n种方法。首先,数组和与target互为相反数,比如数组元素和为2,target为-2,这个时候bagsize为0,显然唯一一种方法为所有元素取符号,即dp[0]=1;我试图自己理解一下,关于题目,我举几个实例,即什么时候会出现dp[0]。

2024-07-12 06:10:24 410

原创 代码随想录算法训练营Day35||动态规划part03,零一背包

二维dp数组可以先遍历背包, 也可以先遍历物品。dp[i] [j] 数组含义为背包容量为j,选择装入物品0到物品i时,能够装入的最大价值。初始化数组时,第一列表示j=0,即背包容量为0,所以第一列为0。第一行需要判断能否装入物品0,能的话即初始化为物品0的价值。只能先遍历物品,再遍历背包。416.分割等和子集:本质是背包问题,容量为sum一半的背包从数组里取数,如果这些数的和正好为sum的一半就返回true。今天主要理解了零一背包的算法,需要理解dp数组的含义,二维数组比较容易理解递推关系。

2024-07-11 04:18:58 340

原创 代码随想录算法训练营Day34|| 动态规划 part02

343.整数拆分:理解递推公式确实有点小难,实际是反复拆分每一个数。贪心算法是群都拆成3,最后留一个4,需要数学证明。63.不同路径II:多了障碍物,但没有复杂很多,主要变化在于初始化数组,以及在递归时添加一个条件即可。62.不同路径:经典智力题了,二维数组的递归很好写。数论和一维数组的写法有点不懂。96.不同的二叉搜索树:暂时跳过吧,今天看球了>_<

2024-07-10 05:50:04 631

原创 代码随想录算法训练营Day33||动态规划part01

以上三题可以选择只维护三个数值,不用维护数组来降低空间复杂度。第一天动态规划还是很简单的。动态规划五步走:dp数组含义,递推公式,初始化数组,遍历顺序,打印dp数组。746.使用最小花费爬楼梯:依然是从前往后的简单递归,难度不大。509斐波那契&70爬楼梯:两道题极其类似,都是简单的递归。

2024-07-09 05:13:39 191

原创 代码随想录算法训练营Day31||贪心算法part05+总结

贪心算法感觉没啥能总结的,全都是在做奥数题,想到了思路就很容易实现,想不到就会把简答的东西做的特别复杂。56.合并区间:和之前做的重叠区间的题目异曲同工,记得排序就行。738.单调递增的数字:一时间想不到的解决办法,写起来虽然很简单。968.监控二叉树:一刷能跳过我是真跳过呀,懒死了>_<

2024-07-07 18:09:05 238

原创 代码随想录算法训练营Day30||贪心算法 part04

452.用最少数量的箭引爆气球:今天主要攻略重叠问题。经历了昨天后,今天对二维数组的处理就游刃有余多了。不断更新右边界的思路确实很妙。763.划分字母区间:要熟悉统计字母出现的最远距离的写法,知道方法以后,代码实现确实不难。435.无重叠区间:和上一题几乎一样,游刃有余!

2024-07-06 17:32:01 188

原创 代码随想录算法训练营Day29||贪心算法part03

406.根据身高重建队列:越来越有做小学奥数题的感觉了。思路上理解了,代码上出了问题。对着二维数组的排序处理蒙圈了好一会。还有static作用的理解没有很到位。135.分糖果: 困难题的思路果然想不到。贪心类题目,总是用一种“似乎哪里不对”的想法,完美解决问题。134.加油站: 暴力解法利用余数的遍历思路是有惊艳到我的。贪心算法的思路也是精彩,想到之后代码很简单。860.柠檬水找零:最简单的一集。

2024-07-05 05:55:26 211

原创 代码随想录算法训练营Day28||贪心算法part02

1005.K次取反后的最大数组和:看视频前,自己整了个究极暴力解法。优化后可以只排序一到两次~45.跳跃游戏II:这题就难多了,感觉贪心算法模块就是考验思路,有思路就OK,没思路就寄。122.买卖股票的最佳时机:看到思路之后直接秒了。今天题目还挺友好,主要还是担心自己没思路。55.跳跃游戏:同上。

2024-07-04 04:51:57 199

原创 代码随想录算法训练营Day27||贪心算法part01

455.分发饼干:初识贪心算法,毫无规律可言,最重要的就是有个思路。这题从小到大和从大到小均可。从小到大更好些一点。由于思路不清晰,分不清用If还是while了。376.摆动序列:看视频一开始讲到平坡就一直在纠结单调平坡的问题,后面总算是解决了。自己写完第一次报错了,不过很快找到了问题。边界上的处理着实要细心。做完也没感觉这是贪心算法。53.最大子数组和:感觉这个章节最重要的就是思路,有思路之后写起来真的快。今天又是刚好勉强完成任务,前面的回溯难题还没看呢。

2024-07-03 05:10:31 212

原创 代码随想录算法训练营Day25||回溯算法part04+总结

491.非递减子序列:这题有了全新的去重方法,定义一个set,在回溯后不删除元素来实现只在树层去重。自己手写代码的时候犯了很多小错误,比如if的判断条件写反了,以及在不该return的地方return了,还有终止条件和数据收集的顺序问题。还是不够熟练导致的。47.全排列II:和上一题相比,就是多了重复的元素,和组合题的去重思路完全一致,先排序,然后数层上不取已经使用过的元素。一刷能跳的题全跳了,感觉不是很好,真的赶紧补补视频先。46.全排列:和组合题大同小异,注意used数组的使用方法和定义的位置。

2024-07-02 07:13:42 243

原创 代码随想录算法训练营Day25||回溯算法 part03(补)

78.子集:相对上一题就简单多了,与组合题不同的是,它答案在每一个节点(之前是在叶子节点),不用判断,直接把节点加入到path。90.子集II:和组合II完全一致的去重逻辑,算是复习了树枝去重和树层去重的区别和写法。今天在录友的提示下,以后先把代码格式化再保存。最近明显懒了,不偷跑了。

2024-07-01 05:11:42 219

原创 代码随想录算法训练营Day24||回溯算法part03

93.复原IP地址:算是回溯算法的中档题?自己写的时候很多奇怪的错误,多写了一步return就报错了。这段代码真的值得反复训练熟悉。今天比较摸鱼,晚点补上。

2024-06-30 21:46:25 449

原创 代码随想录算法训练营Day23||回溯算法part2

131.分割回文串:脑子模拟递归和回溯的时候已经卡住了,这里终止条件的“>="还没有理解透彻。这道题用到了substr函数,s.substr(i,1)指从索引i开始,提取一个字符串。感觉要多写几遍才能熟悉这道题,过的有点稀里糊涂,全靠自己回溯的感觉。40.组合总和II: 视频看了一半,自信满满去去重了,然后错了。这个树层去重和树枝去重着实有点聪明了。果然自己去尝试,然后犯错,是好事。17.电话号码的字母组合:今天过了遍代码,感觉还是不太熟练呀。39.组合总和:感觉和之前的题类似呀,多写几遍快熟练了就。

2024-06-29 05:44:18 204

原创 代码随想录算法训练营Day22||回溯算法part01

77.组合:回溯法入门,一看就会,一写全错,边界处理上都是问题,对startindex理解还没到位。还有一个剪枝操作需要理解!盯着看了会感觉理解了,感觉有点微妙。17.电话号码的字母组合:看了视频,理解了思路,明天自己手写一下代码再熟悉一遍!慢慢就熟悉回溯的写法了~回溯法理论:回溯法就是递归法,可以解决组合问题,切割问题,子集问题,排列问题。216.组合III:这题算是更加熟悉了回溯算法的公式,多写几遍就顺畅了。

2024-06-28 06:07:21 216

原创 代码随想录算法训练营Day21||二叉树part08+总结

总体写法类似前中序数组构造二叉树,将数组分成左右区间,分别构造左子树和右子树。涉及到二叉树的构造,一般用前序,从根节点构造。对于普通二叉树,一般用后序,下面的节点一步步操作往上返回。对于搜索二叉树,用中序,利用有序性,经常使用双指针。669.修建二叉搜索树:看了一半的视频,理解思路后自己一遍写出来了,感觉到自己逐渐熟悉二叉树的递归函数了。二叉树完结撒花,感觉后面天天都在递归法,已经不记得怎么用迭代法了,就对层序遍历的迭代法有印象了。零碎的知识着实不少。注意要从大到小遍历,因此是反向中序,即右中左遍历。

2024-06-27 03:18:53 327

原创 代码随想录算法训练营Day20||二叉树part07

701.二叉搜索树中的插入操作:自己用迭代法跌跌撞撞写出来了,看了视频的递归法,感叹递归之简洁,在看了随想录网站的迭代法,思路又有微妙的不同。关节在于找到插入位置时,必须要知道此时的父节点,解决这个问题就好做了。450.删除二叉树中的节点:删除比插入难很多,需要考虑多种情况,并且脑子里需要有一个清晰的改变树的结构的思路。在c++中,删除节点有一个释放内存的操作,暂时没有写出来。235.二叉搜索树的最近公共祖先:昨天的问题被群友解答了,确实没必要判断是否为空指针。今天累了,不偷跑了,早点睡。

2024-06-26 04:55:58 186

原创 代码随想录算法训练营Day19||二叉树 part06

236.二叉树的最近公共祖先:代码写起来很简单,思路需要学习(又是我想不到的思路了),细节在于第二种情况也被代码包括了。遍历到p or q的时候,把它返回给上一层,直到找到一个元素左右都不为空。235.二叉搜索树的最近公共祖先:用递归法写了一遍,确实过了,但还有点疑问,在群里求助一下。501.二叉搜索树的众数:补了代码随想录给的方法,比我昨天偷跑时自己写得优化了不少。

2024-06-25 04:16:33 330

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除