前言
2023年1月决定将力扣作为自己学习算法和数据结构的长期平台。9月20日左右,决定记录下来自己解决力扣编程题的过程(多半是山路十八弯、秃头、白了少年头的过程,菜菜菜!!!)。
这份学习日志争取做到以下三点(flag环节):
- 可能格式、形式比较随意,偏流水账,但保证日志内容的清晰准确
- 预计更新、维护2年时间(大三、大四)
- 希望能够完整记录与展现一位普通本科计算机专业学生的学习情况和学习过程,希望对读者有一定的参考价值
以上,完毕。
日志说明:
从2023年9月开始,每个月会将自己的学习日志推送到GitHub仓库GitHub算法和数据结构学习日志,同时决定将每个月的学习日志发到各大有活力的互联网技术社区。
2024年1月算法和数据结构学习日志
1月1日 周一
- 1599. 经营摩天轮的最大利润,力扣日常每日一题,思路:
枚举+迭代
,题目有点长,但是弯弯绕绕理清了思路,写力扣每日一题的意义是:锻炼自己的解题思维(具体是看到一道题思考用什么算法,用什么数据结构)以及发现自己没有学过的知识点(例如:线段树、字典树、树状数组)以及白嫖每日一题的10积分。Over!!! Over!!!
1月2日 周二
- 466. 统计重复个数,力扣日常每日一题,啊啊啊!!!无法思考!!!Control C/V!!!
1月3日 周三
- 2487. 从链表中移除节点,力扣日常每日一题,思路:
递归
,可是,俺不会呀!!!菜菜菜!!!Control C/V!!!
1月4日 周四
- 307. 区域和检索 - 数组可修改,
树状数组入门题
,通过这道题和题解,学习树状数组的基本使用
- 2397. 被列覆盖的最多行数,力扣日常每日一题,一道自己曾经做过的题
- 学习
线段树
(线段树解决的是「区间和」的问题,且该「区间」会被修改,线段树的每个节点代表一个区间)优质博客题解:[线段树详解](729. 我的日程安排表 I - 力扣(LeetCode)),示例题目:729. 我的日程安排表 I - 学习
字典树
(应用场景:n个单词,q次询问,每一次询问一个单词b,判断b是否出现在n个单词中)优质博客:http://t.csdnimg.cn/kPQk5 - 总结:今天初步了解了
树状数组
、线段树
、字典树
这三个听起来很高级的数据结构,通过阅读他人的博客和题解进行学习,再次惊叹世界还是牛人多
,学习数据结构,没有必要重复造轮子,重点在于学习数据结构的使用
1月5日 周五
- 1944. 队列中可以看到的人数,力扣日常每日一题,思路:
单调栈
,又又又是Control C/V的一天
1月6日 周六
- 2807. 在链表中插入最大公约数,力扣日常每日一题,之前做过的一道题,思路:
递归式遍历
,噜啦啦!!!重拳出击!!!
参加力扣第121场双周赛
第一次双周赛上分,t4是数位DP
的模板题,但是没有时间写了,菜菜菜!!!还是原来的观点:既然难改分奴本性,就争取上大分,不必纠结于某一场比赛的小上分和小掉分
1月7日 周日
- 力扣日常每日一题,详情略
参加力扣第379场周赛
从周赛中能够明显感觉到自己相较去年所取得的进步,同时,也能够明显的感觉到自己目前的不足与短板。周赛还是很好玩的捏(人菜瘾大!!!)。最后,既然难改分奴本性,就争取上大分。复盘结束,over!!!over!!!
1月8日 周一
- 447. 回旋镖的数量,力扣日常每日一题,思路:
枚举+哈希+组合数学
,关键思路是枚举
,独立解决了这道题,拿下,拿下!!!
1月9日 周二
- 力扣日常每日一题,详情略
1月10日 周三
- 2696. 删除子串后的字符串最小长度,力扣日常每日一题,思路:
栈
1月11日 周四
-
2645. 构造有效字符串的最少插入数,力扣日常每日一题,我的思路:
栈
,题解区思路:贪心
,要慢慢形成自己的思路,同时,多看别人的思路与想法 -
看灵茶山艾府的题单推荐:分享丨从周赛中学算法 - 2023 下半年周赛题目总结
-
2999. 统计强大整数的数目,第121场双周赛t4,思路:
数位DP
,要开始收集整理一些代码模板 -
3003. 执行操作后的最大分割数量,第379场周赛t4,思路:
DP
或枚举+二分
1月12日 周五
- 2085. 统计出现过一次的公共字符串,力扣日常每日一题,思路:
哈希
- 1653. 使字符串平衡的最少删除次数,思路:
动态规划
,重拳出击!!! - 2088. 统计农场中肥沃金字塔的数目,思路:
动态规划
,又又又被题解区大佬的优雅思路秀翻啦!!!还得是思维!!! - 730. 统计不同回文子序列,思路:
区间DP
,不知道如何状态转移,决定先放下这道题!!!菜菜菜!!!
1月13日 周六
- 2182. 构造限制重复的字符串,题解区思路:
贪心
或者双指针
,我的思路:贪心
但是非常不优雅,非常屎山,最后还跑不出正确结果,由于时间问题,决定先Control C/V 解决这道题,菜菜菜!!!
1月14日 周日
- 83. 删除排序链表中的重复元素,力扣日常每日一题,思路:
递归
参加力扣第380场周赛
寒假回家后的第一场周赛,t3思路:数位DP
,t4思路:二分 + KMP
1月15日 周一
- 82. 删除排序链表中的重复元素 II,思路:
链表虚拟头节点+递归/迭代
,由于时间问题,选择了Control C/V其实就是菜
1月16日 周二
- 2719. 统计整数数目,思路:
数位DP
,由于时间原因,选择了Control C/V其实就是菜
1月17日 周三
- 2744. 最大字符串配对数目,力扣日常每日一题,重拳出击!!!
1月18日 周四
- 2171. 拿出最少数目的魔法豆,力扣日常每日一题,思路:
前缀和 + 二分
,同时决定在写代码时遵守基本的代码规范
1月19日 周五
- 2809. 使数组和小于等于 x 的最少时间,力扣日常每日一题,思路:
数学 + 思维 + 01背包
,由于时间问题其实就是菜,选择了Control C/V
1月22日 周一
- 670. 最大交换,力扣日常每日一题,思路:
贪心
- 3012. 通过操作使数组长度最小,第112场双周赛t3,思路:
贪心
,又又又被大佬的优雅贪心秀翻啦!!!菜菜菜!!!
1月23日 周二
- 2765. 最长交替子数组,力扣日常每日一题,详情略
- 219. 存在重复元素 II,重拳出击
- 372. 超级次方,一道很有意思的题,但是由于太菜了,决定先放下这道题
- 473. 火柴拼正方形,又是一道很有意思的题,然而又又又因为太菜了,选择了跳过
- 501. 二叉搜索树中的众数,又又又写屎山啦!!!
- LCR 131. 砍竹子 I,思路:
线性DP
,重拳出击!!!
1月24日 周三
今天决定专攻力扣2023下半年周赛动态规划题
- 2865. 美丽塔 I,力扣日常每日一题,思路:
枚举
,拿下!!! - 2770. 达到末尾下标所需的最大跳跃次数,思路:
线性DP
,拿下!!! - 2915. 和为目标值的最长子序列的长度,思路:
0-1背包
,拿下!!! - 2826. 将三个组排序,思路:状态机DP,拿下!!!(但是要熟悉python编程呀!!!菜菜菜!!!)
- 2786. 访问数组中的位置使分数最大,思路:
线性DP(迭代的思路)
,对着题解代码DEBUG半天,啊啊啊!!!要尽快熟悉Python编程呀!!! - 2944. 购买水果需要的最少金币数,思路:
递归+记忆化搜索或DP递推
,又又又被大佬的优雅思路秀翻啦 - 2771. 构造最长非递减子数组,再次思考这道题,思路:
状态机DP
,拿下!!!拿下!!! - 2787. 将一个数字表示成幂的和的方案数,思路:
01背包
,本质上是选和不选,拿下!!!拿下!!! - 2830. 销售利润最大化,再次思考这道题,思路:
线性DP
,拿下!!!拿下!!! - 2767. 将字符串分割为最少的美丽子字符串,思路:
划分型DP
,我的思路:暴力DFS
,啊啊啊!!!又又又写了又臭又长的屎山!!! - 2901. 最长相邻不相等子序列 II,思路:
线性DP
,啊啊啊!!!又又又因为不熟悉python编程而Debug半天
1月25日 周四
- 2859. 计算 K 置位下标对应元素的和,力扣日常每日一题,拿下!!!拿下!!!python API,yyds!!!
- 2925. 在树上执行操作以后得到的最大分数,二刷这道题,思路:
树形DP+转化思维
再次被大佬优雅的转化
思维和分解子问题
思维秀翻啦!!! - 337. 打家劫舍 III,重新思考这道之前放下的题目,思路:
树形DP
,解决了这道题,拿下!!!拿下!!! - 2919. 使数组变美的最小增量运算数,思路:
转换思维 + 线性DP
,又又又被大佬的优雅思路秀翻啦!!!慢慢体会如何分解子问题
- 2896. 执行操作使两个字符串相等,思路:
线性DP
,一道之前令自己破大防的题,看了题解后解决了这道题,当自己没有思路时,要学习他人的思路,理解他人的题解 - 2930. 重新排列后包含指定子字符串的字符串数目,思路:
记忆化搜索(背包问题)或者容斥原理
- 1012. 至少有 1 位重复的数字,思路:
数位DP
,再次熟悉一下这道题,熟悉模板的使用 - 2827. 范围中美丽整数的数目,思路:
数位DP
,对于数位DP的理解加深了,拿下!!!拿下!!! - 2801. 统计范围内的步进数字数目,思路:
数位DP
,重新写这道题,加深了对于python编程和数位DP的理解 - 2999. 统计强大整数的数目,思路:
数位DP
,一道需要包含上下界的数位dp题
1月26日 周五
通过补2023下半年力扣周赛的题,计划:2024年打完周赛后的几天内一定要补题,体会大佬们是如何化繁为简,把看似复杂的题用简洁的思路与算法结局。2024年打完周赛后一定要补题!!!一定要补题!!!一定要补题!!!(重要的事情说三遍)
- 2846. 边权重均等查询,力扣日常每日一题,思路:
树上倍增(最近公共祖先)
,由于树上倍增并不在近期学习计划内,选择了Control C/V - 834. 树中距离之和,
换根DP
入门题,通过这道题,初步领会了换根DP的思想 - 2858. 可以到达每一个节点的最少边反转次数,思路:
换根DP
,在慢慢领会换根DP的思想精髓 - 2827. 范围中美丽整数的数目,思路:
数位DP
,再次用现有的数位DP模板解决了这道题,提高了自己对于算法模板的应用能力和理解能力 - 2920. 收集所有金币可获得的最大积分,看似很复杂的题却可以用很简洁的方法解决,又又又被大佬优雅简洁的思路秀翻啦,思路:
树形DP
,通过算法题,体会什么叫做大道至简 - 2801. 统计范围内的步进数字数目,再次思考这道题,使用
树位DP
v2.0模板解决了这道题,提高了自己对于算法模板的应用能力和理解能力 - 2911. 得到 K 个半回文串的最少修改次数,思路:
划分型DP+字符串相关
,通过视频和题解理解了这道题的解题思路,好好感受,好好体会 - 3008. 找出数组中的美丽下标 II,学习KMP算法,通过这道题,初步了解了KMP算法,并且初步掌握了KMP算法模板的使用
1月27日 周六
- 2861. 最大合金数,力扣日常每日一题,思路:
二分
,二刷这道题,解决编程题重要的是思路要清晰
1月28日 周日
- 365. 水壶问题,力扣日常每日一题,思路:
广度优先搜索或数学
,由于时间关系,选择了Control C/V
参加第382场周赛
由于更换了编程语言,Java -> Python,不熟悉python的API,导致t2 wa了6发在尝试为自己的菜找借口,不过从本周开始,决定打完周赛后一定要补题,既然难改分奴本性,就争取上大分!!!
1月29日 周一
- 514. 自由之路,力扣日常每日一题,由于时间问题,选择了Control C/V
其实就是菜 - 3022. 给定操作次数内使剩余元素的或值最小,补题,力扣第382场周赛t4,思路:
位运算试填法
,了解了这道题的基本思路,但对于有些代码细节仍不理解,决定先放下这些细节,先了解基本思路基本思想即可其实就是菜
1月30日 周二
- 2808. 使循环数组所有元素相等的最少秒数,思路:枚举。菜鸡又又又选择了Control C/V
1月31日 周三
- 2670. 找出不同元素数目差数组,要慢慢熟悉python的API的使用呀!!!又又又调试了半天,菜菜菜!!!