一个月学习刷题规划详解
30天C++/C语言刷题进阶路线
第一周:基础数据结构与算法
目标:掌握数组、字符串、链表、栈/队列等基础数据结构的实现与应用。
Day 1-2:数组与双指针
- 算法:双指针(快慢指针、对撞指针)、前缀和。
- 练习题:
- 两数之和(LeetCode 1)
- 移动零(LeetCode 283)
- 盛最多水的容器(LeetCode 11)
Day 3-4:字符串处理
- 算法:字符串反转、KMP算法(可选)、滑动窗口。
- 练习题:
- 反转字符串(LeetCode 344)
- 无重复字符的最长子串(LeetCode 3)
- 字符串的排列(LeetCode 567)
Day 5-6:链表操作
- 算法:虚拟头节点、快慢指针、链表反转。
- 练习题:
- 反转链表(LeetCode 206)
- 环形链表(LeetCode 141)
- 合并两个有序链表(LeetCode 21)
Day 7:栈与队列
- 算法:单调栈、队列实现。
- 练习题:
- 有效的括号(LeetCode 20)
- 用栈实现队列(LeetCode 232)
第二周:递归与分治
目标:掌握递归思想、分治算法,以及二叉树的基础操作。
Day 8-9:递归与回溯
- 算法:递归模板、回溯剪枝。
- 练习题:
- 子集(LeetCode 78)
- 全排列(LeetCode 46)
Day 10-11:二叉树遍历
- 算法:前/中/后序遍历(递归与迭代)、层次遍历。
- 练习题:
- 二叉树的最大深度(LeetCode 104)
- 二叉树的层序遍历(LeetCode 102)
Day 12-13:分治与DFS/BFS
- 算法:分治思想、深度优先搜索(DFS)、广度优先搜索(BFS)。
- 练习题:
- 合并K个升序链表(LeetCode 23)
- 岛屿数量(LeetCode 200)
Day 14:动态规划入门
- 算法:斐波那契数列、爬楼梯问题。
- 练习题:
- 爬楼梯(LeetCode 70)
- 打家劫舍(LeetCode 198)
第三周:动态规划与贪心算法
目标:掌握动态规划(DP)的经典问题及贪心算法的应用。
Day 15-16:一维DP
- 算法:状态转移方程、空间优化。
- 练习题:
- 最长递增子序列(LeetCode 300)
- 零钱兑换(LeetCode 322)
Day 17-18:二维DP
- 算法:背包问题、矩阵路径问题。
- 练习题:
- 不同路径(LeetCode 62)
- 编辑距离(LeetCode 72)
Day 19-20:贪心算法
- 算法:区间调度、跳跃游戏。
- 练习题:
- 跳跃游戏(LeetCode 55)
- 加油站(LeetCode 134)
第四周:高级数据结构与综合练习
目标:掌握堆、哈希表、图算法,并进行综合刷题。
Day 21-22:堆与优先队列
- 算法:大顶堆/小顶堆、Top K问题。
- 练习题:
- 数组中的第K个最大元素(LeetCode 215)
- 合并K个升序链表(LeetCode 23)
Day 23-24:哈希表与图算法
- 算法:哈希冲突处理、图的DFS/BFS。
- 练习题:
- 字母异位词分组(LeetCode 49)
- 课程表(LeetCode 207)
Day 25-27:综合练习
- 重点题目:
- 最长连续序列(LeetCode 128)
- 接雨水(LeetCode 42)
Day 28-30:CCF/CSP正规题目
- 建议:选择3-5套题限时完成,例如:
额外建议
- 每日复盘:记录错题并分析原因,重点关注时间复杂度和空间优化。
- 代码规范:使用一致的变量命名和注释风格。
- 资源推荐:
- 书籍:《算法导论》《剑指Offer》
- 在线平台:LeetCode、牛客网。