【一篇关于自我刷题的思考】
📝前言说明:
本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C++。
每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的讲解,主要是个人见解,如有不正确,欢迎指正,一起进步!
🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C++学习笔记,C语言入门基础,python入门基础,python刷题专栏
🎀CSDN主页 愚润泽
题目
- 一,来自Deepseek的刷题方法总结
- 二,灵茶山艾府的文章
- 三,自我思考总结
一,来自Deepseek的刷题方法总结
- 结构化刷题策略
- 分专题突破(如:数组→链表→树→图→动态规划→回溯→贪心→字符串)
- 按照难度梯度推进(Easy→Medium→Hard)
- 同类题目集中训练(如:连续刷3-5道二叉树遍历题)
- 黄金三步刷题法
① 限时独立解题(30分钟/题)
- 严格模拟面试环境
- 记录初始思路和卡点
- 示例:遇到"两数之和"先思考暴力解再优化
② 深度解析答案
- 对比自己的解法与最优解
- 绘制算法流程图
- 时间复杂度推导(如:O(n²)→O(n)的优化过程)
- 记录关键代码段(如:双指针的移动条件)
③ 多维总结模板
- 问题特征(输入规模、数据特点)
- 解题模式(滑动窗口/前缀和/分治)
- 易错点(边界条件、特殊用例)
- 变种可能性(如:三数之和→四数之和)
- 知识体系构建技巧
- 建立算法脑图(如:树相关包含遍历、BST、堆等)
- 制作错题本(含错误代码+修正版本)
- 开发代码模板库(如:二分查找的三种写法)
// 示例:二分查找模板
int binarySearch(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while(left <= right) {
int mid = left + (right - left)/2;
if(nums[mid] == target) return mid;
else if(nums[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
- 刻意练习方法论
- 同题多解训练(如:反转链表用迭代/递归/栈三种方式)
- 定期重刷旧题(间隔1天→3天→1周)
- 变式题拓展(LeetCode题目的相似题推荐功能)
- 思维迁移训练
- 抽象问题本质(如:岛屿问题本质是连通分量计数)
- 建立模式识别库
- 看到"子数组和"→前缀和/滑动窗口
- 遇到"最短路径"→BFS/Dijkstra
- 需要"状态转移"→动态规划
- 高效工具链
- 使用LeetCode Notebook记录解题思路
- 利用VisuAlgo可视化算法流程
- 制作Anki卡片记忆核心公式(如:排列组合公式)
- 实战提升技巧
- 参加周赛/双周赛(锻炼限时解题能力)
- 参与代码评审(学习他人优秀解法)
- 录制解题视频(通过讲解加深理解)
- 动态规划专项训练法
① 建立DP分析框架:
- 状态定义 → 转移方程 → 初始条件 → 遍历顺序
② 经典题目阶梯:
-
爬楼梯(基础递推)
-
打家劫舍(状态选择)
-
零钱兑换(完全背包)
-
最长公共子序列(二维DP)
-
编辑距离(复杂状态转移)
-
复杂度控制意识培养
- 数据规模预判法:
10^6 → O(n)
10^3 → O(n²)
20 → O(2^n) - 空间优化技巧(滚动数组、状态压缩)
- 持续进步机制
- 每月制作知识雷达图(算法/数据结构/编码能力)
- 建立个人进度看板(待学习/掌握中/已精通)
- 参与开源项目算法模块(如:参与C++ STL优化)
关键要点:
- 每道题至少经过3次迭代:初解→优化→总结
- 每周留出2小时进行专题复习
- 建立自己的模式识别库(如:看到拓扑排序立即想到入度表)
- 对经典题要做到肌肉记忆(如:快速写对快排)
示例学习路径:
第1周:数组+双指针(15题)
第2周:链表+虚拟头节点(10题)
第3周:二叉树+递归(20题)
第4周:回溯+剪枝(15题)
…
每月末进行综合训练
通过这套方法,当遇到新题时你会:
- 快速识别题目类型
- 调取相关解题模式
- 构建解决方案框架
- 避免常见错误陷阱
- 优化时间和空间复杂度
二,灵茶山艾府的文章
文章链接:https://leetcode.cn/discuss/post/3141566/ru-he-ke-xue-shua-ti-by-endlesscheng-q3yd/
三,自我思考总结
- 系统刷题可能比散刷更好,但不代表散刷没有好处。当我们要熟悉某一个数据结构的时候,比如栈,队列…散刷可以让我们快速熟悉他们的特点,已经它们的方法和接口。但是,如果想实际提高自己的算法思想的时候,还是得系统刷更合适,并且要对同类型的题型进行集中练习
- 质量>数量,题目的质量不难保证。问题是刷题的质量:做题时,做题后。
- 做题时:要保证独立的思考,哪怕错误的思考也是有意义的,给自己每道题定一个刷题时间限制
- 写题时,注重思路的体现。对于新手而言,把代码写的简洁固然是好事,但是当前水平下能力不足,多写几个if else,不代表代码不好。前期只要达到代码中没有太多冗余的部分就好。
- 做题后,写没写出来的结果不重要,时间结束后,先看容易理解的题解,对比自己的思路,有哪些“新方法”或者“卡壳点”,当掌握好基本的解法以后,再去探究更好的解法,但是偏难怪的,超出能力范围的,不常见的解法不要过度研究。
- 复盘与总结,复盘时间间隔从短到长:1天 → 3天 → 7天,这三次复盘是必须的,后续的复盘看自我掌握情况。复盘时,注重总结专题中的方法。
- 能力到达一定程度后,参加周赛等,进一步感受真实场景,提升能力
相信自己,刷题是一个痛苦且漫长的过程,需要好好沉淀,加油!
🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!