一、为什么要刷题?
- 提升编程能力,强化对数据结构的理解,熟练掌握常用的算法等
- 为竞赛、考试做准备
- 找实习、找工作需要(上机考试+面试手撕代码)
- 提升自信心,放松一下
二、刷题前应该有哪些知识储备?
(1)基本掌握数据结构和常用算法
① 基本数据结构
- 栈:后进先出(LIFO)的数据结构,用于存储元素,如函数调用栈。
- 队列:先进先出(FIFO)的数据结构,用于按顺序处理元素,如打印任务队列。
- 链表:通过节点连接元素,可动态增删元素,适用于非连续内存空间。
- 树:节点间存在父子关系的层次结构,如二叉树、搜索树等。
- 堆:特殊的树形数据结构,通常实现为完全二叉树,用于实现优先队列。
② 常用算法
- 贪婪算法:在每一步选择中都采取最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。
- 动态规划:通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。
- 分治算法:将原问题分解为若干个子问题,递归地求解子问题,并将子问题的解合并起来得到原问题的解。
- 回溯算法:通过探索所有可能的候选解来找出所有的解,如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些修改来丢弃该解。
- 分支限界:与回溯算法类似,但加入了剪枝操作,即在搜索过程中根据某种评估函数舍弃一些不可能得到最优解的分支,提高搜索效率。
(2)懂得如何入手进行算法设计与分析
- 按照要求设计对应可以完成任务的算法
- 算法复杂度分析
三、作为一名小白如何刷题?
(1)刷leetcode中的题目
① 目的:建立扎实的coding能力
② 方法
- 掌握一门基本的编程语言
- 按照特定模块进行系统性刷题(千万不要简单按照esay/mid/hard的顺序随机刷题)
- 具体按照哪一种模块的顺序刷题可以参考 https://www.zhihu.com/question/36738189
- 必须要反复刷题,做到一题多解(分析每一种解法的复杂度),而且不能只盯着高频题目
- 具体刷题:一看、二抄、三改、四写
- 现在leetcode上面有上千道题目,每个部分一定要找有代表性的题目去做,而且在刷题过程中会用模版去套用
(2)刷《剑指offer》中的题目
① 目的:建立求职面试的解题思路
② 方法
- 建议刷三遍
- 第一遍:不需要死磕,但是要完全弄懂题目,必须看题目的分析
- 第二遍:进一步熟悉题目,对一道题的各种变形也可以做出
- 第三遍:对于这不到100道题和一些相应的变形已是特别熟练的状态,上机编程没有问题,手撕代码也没问题
(3)可能遇到的问题与解决方案
① 可能遇到的问题
刷过的题目老忘记,刷题的速度很慢,坚持不下来
② 建议的解决方案
- 及时复习,反复刷题,与人分享,以及做笔记
- 制定计划,分解计划,快速刷题(为了节约时间,5分钟没有思路就不要浪费时间了,明确认知“你是为了通过面试”,理解不了的先背下来)
- 为自己制定奖惩措施,或者组队刷题
四、资料推荐
(1)书籍
- 《大话数据结构》:用通俗易懂的方式介绍数据结构,适合初学者。
- 《啊哈!算法》:通过生动的例子和故事讲解算法,增加学习乐趣。
- 《图解算法》:通过图解的方式直观展示算法的执行过程,易于理解。
- 《算法竞赛入门经典》:针对算法竞赛的入门书籍,适合有一定基础的读者。
- 《hello算法》:深入浅出地介绍算法,适合对算法感兴趣的读者。
(2)课程
- 中国大学MOOC《数据结构》(陈越):陈越老师主讲的经典数据结构课程,内容全面且深入。
- 程序设计基础(C&C++)(戴波):涵盖C和C++语言基础及程序设计思想,为学习数据结构打下坚实基础。
(3)刷题网站
- LeetCode:提供大量编程题目和在线评测,适合算法练习和面试准备。
- 牛客网:不仅有在线编程题目,还有面试经验分享和模拟面试等功能。
- PAT(Programming Ability Test):浙江大学推出的在线编程能力测试平台,题目难度较高。
- 各大高校的OJ系统(如北大、浙大等):提供大量题目和在线评测,部分题目难度较高,适合挑战。
- Codeforces:全球知名的编程竞赛平台,提供大量题目和在线比赛,适合提升算法水平。
【腾讯文档】刷题分享https://docs.qq.com/mind/DY3JhS0VQaW12b3hL?mode=mind