前言
2023年1月决定将力扣作为自己学习算法和数据结构的长期平台。9月20日左右,决定记录下来自己解决力扣编程题的过程(多半是山路十八弯、秃头、白了少年头的过程,菜菜菜!!!)。
这份学习日志争取做到以下三点(flag环节):
- 可能格式、形式比较随意,偏流水账,但保证日志内容的清晰准确
- 预计更新、维护2年时间(大三、大四)
- 希望能够完整记录与展现一位普通本科计算机专业学生的学习情况,学习过程,希望对读者有一定的参考价值
以上,完毕。
日志说明:
从今年9月开始,每个月会将自己的学习日志推送到GitHUb仓库GitHub算法和数据结构学习日志,最近几天看了几篇力扣社区的年终总结帖子,决定将Github仓库中的日志记录发到CSDN社区。
2023年10月算法和数据结构学习日志
10月1日 周日
周赛
参加力扣第365场周赛,被打爆啦!!!菜菜菜!!!
10月3日 周二
下午,学习思考记录
14:40开始思考第365场周赛的编程题
- 2875. 无限数组的最短子数组,第365场周赛的t3,很具有思维灵性的一道题,尽管看了题解和视频但还是没弄懂,决定先暂时放下
10月5日 周四
早上,思考记录
- 2730. 找到最长的半重复子字符串,双指针,解决了这道题
- 2698. 求一个整数的惩罚数回溯型枚举,解决了这道题
- 207. 课程表,认为自己的逻辑没有错误,代码没有错误,反复检查还是没有发现错误,但是运行结果却是错的,于是认定是力扣平台的编译器错误(当然,非常有可能过几天发现错的还是自己)
下班
11:30下班!!!干饭!!!
中午,下午,学习思考记录
12:30开始学习与思考
- 读labuladong算法学习网站的文章
环检测及拓扑排序算法
,这篇文章未读懂,未能get到作者的思路 - 读csdn博客
拓扑排序(http://t.csdnimg.cn/RrZk5)
,通过这篇博客理解了什么是拓扑排序 - 读csdn博客
拓扑排序(Topological Sorting)(http://t.csdnimg.cn/Cu31q)
- 拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:
- 每个顶点出现且只出现一次。
- 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
- 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。
下班
13:30下班!!!回寝室学习围棋!!!
10月6日 周五
早上学习记录
- 207. 课程表、210. 课程表 II知道了如何用BFS实现拓扑排序,但是不知道Bug出现在哪里,就是有用例过不了,也许是眼睛没吃油,也许是大脑宕机了,总之先放下吧,当眼睛没吃油or大脑宕机的时候,重点领悟算法的总体思想!!!在干饭前,把代码发到了刷题群里,群友帮助找到了Bug!!!
Arrays.fill(map,new HashSet<Integer>());
会装入同一个Set对象!!! - 851. 喧闹和富有,如何将具体问题抽象为拓扑排序,思考节点和有向边的方向,又又又不知道Bug在哪,菜菜菜!!!
中午,下午,学习记录
- 根据群友的提醒,找到了自己遇到的Bug,解决了早上遗留的问题
- 913. 猫和老鼠,近20min没思路,决定看题解,看题解是DP,这不是今天的学习主线,于是决定先跳过
菜菜菜 - LCR 114. 火星词典题目意思未弄懂,先跳过
- 决定读知识星球的文章
下班
15:00下班
10月7日-10月20日
由于一时手贱用shift+delete永久删除了这段时间的日志记录。所以。。。。。。绝对不是俺想销毁我是蒟蒻的证据
心态崩了的一次记录
具体情况:https://leetcode.cn/circle/discuss/oy0twJ/
10月21日
15:00左右开始思考编程题
- 2316. 统计无向图中无法互相到达点对数,思路并不复杂,只是有些蒟蒻一看到图的题就慌得一匹,俺不说是谁,谁心里清楚,菜菜菜!!!
- 2606. 找到最大开销的子字符串一道基础动态规划题,独立解决了这道题,欸嘿,欸嘿!!!
- 2707. 字符串中的额外字符,一道基础动态规划题,但是自己不知道如何简洁的状态定义。看题解后完成了这道题!!!
10月22日 周日
参加力扣第368场周赛,记录下t3(100097. 合法分组的最少组数)弯弯绕绕的过程:
- 初看觉得是贪心,但是不知道如何贪心
- 再看觉得可以二分,但是最后发现应该不可以二分,在这条思路上花费了大量的时间
- 最后尝试转二分为暴力,发现自己的二分思路有很多逻辑上的BUG
- 菜菜菜!!!菜菜菜!!!
10月23日 周一
- 2910. 合法分组的最少组数、力扣第368场周赛t3,思路:
贪心
,唉,唉,唉,😔,😔,😔,生活不易,菜鸡叹气!!! - 2911. 得到 K 个半回文串的最少修改次数力扣第368场周赛t4,思路:
DP
,未能理解此题的状态转移和状态定义,决定先放下这道题!!!菜菜菜!!!
10月24日 周二
- 1155. 掷骰子等于目标和的方法数,力扣每日一题,记录下此题弯弯绕绕的过程:先尝试暴力DFS超时了,再尝试记忆化搜索还是超时,决定看题解,看了题解之后发现自己写的记忆化搜索只需要修改一行代码就可以了,通过阅读题解对于递归的理解加深了
- 1155. 掷骰子等于目标和的方法数,读完题解之后,按照题解的思路重构了代码,体会到了**递归到记忆化搜索到递推(DP)**的过程
10月25日 周三
- 2698. 求一个整数的惩罚数力扣每日一题 思路:对于每一个以s[i]开头的子字符串,枚举这个子字符串的结束位置j(1<=j<=n),计算substring(i,j)的值即可(要学会清晰的表达自己的枚举方案)
10月26日 周四
日常思考力扣每日一题
10月27日 周五
- 2585. 获得分数的方法数,通过:
暴搜+记忆化优化
AC了这道题,记忆化的精是避免大量重复计算,剪枝的精髓是提前去掉不可行方案 - 1465. 切割后面积最大的蛋糕
思路:
数学+贪心`,解决了这道题 - 2547. 拆分数组的最小代价尝试用
暴搜+记忆化
依然超时,还有可以优化的部分,决定先暂时放下这道题
10月29日 周日
- 274. H 指数力扣每日一题,自己的思路:
排序+双指针
,题解的思路:排序+二分
,经过对比,发现自己的双指针思路也是可行的。
参加第369场力扣周赛
发现自己t2想得太复杂了,但最后能够理出正确的清晰的思路还是OK的,慢慢的养成了打力扣周赛的习惯
10月30日 周一
- 275. H 指数 II力扣每日一题,思路:
二分
,学会用文字的形式使自己的思路更加清晰
10月31日 周二
- 2003. 每棵子树内缺失的最小基因值力扣每日一题,是DFS的一道思维好题,很有启迪意义