力扣君看到这个问题的时候,已经时隔 N 年,力扣(LeetCode)上的题目已经有 1000+ 了。
一目了然的题目分类
力扣的题覆盖面极大,目前已有 1000+ 公开题目资源,涉及了许多算法与数据结构,有贪心,搜索,动态规划,链表,二叉树,哈希表等。这些题目所涉及的知识点都有很大的实际应用价值,所以,力扣不仅对题目难度进行了划分,而且我们还对题目的知识点做了分类,为每一道题都打上了标签,您可以在所有题目中筛选出您感兴趣的主题进行训练,我们相信您在经过一段时间训练后,一定会变得更强,并很有可能拿到心仪的 Offer。
据我们了解到的情况,Easy 题和 Medium 题在面试中比较常见,通常会以手写代码之类的形式出现,您需要对问题进行分析并给出解答,并于面试官进行交流沟通,有时还会被要求分析时间复杂度与空间复杂度,面试官会通过您对题目的分析解答,了解您对常用算法的熟悉程度和您的程序实现功底。
而在一些对算法和程序实现功底要求较高的岗位,Hard 题也是很受到面试官的青睐,如果您在面试中成功 Bug-Free 出一道 Hard 题,我们相信您一定会给面试官留下很深刻的印象,并极大增加拿到 Offer 的概率,据相关人士统计,如果您在面试中成功解出一道 Hard 题,大概率就能拿到 Offer 了。
所以, 力扣中 Easy 和 Medium 相当于面试中的常规题,而 Hard 则相当于面试中较难的题,解出一道 Hard 题,那你已经向你的 Dream Offer 迈进了一大步了。力扣的题那么多,面试准备时间往往没那么多,怎么办呢?谁都想花最少的时间能事半功倍吧!力扣的每道题都会标识出它在面试中的出现频率,大家完全可以有的放失的进行刷题,既省时间效率也高!
多种语言支持
力扣目前支持 16+ 种编程语言:C++, Java, Python, Rust, Kotlin 等语言,不管您的擅长语言是哪一种,你都将在力扣获得愉快的做题体验,因为你能更好地注重于问题所用算法与数据结构本身,而不是纠结于您不擅长语言的细节上。
题目这么多?应该如何刷?
刷题前准备
首先,刷题前你需要具备一些算法和数据结构的基础,这些基础包括:
1. 常考的数据结构: 数组、字符串、链表、树(如二叉树)等
2. 常考的算法: 分治、贪心、穷举、动态规划、回溯等
时间充裕的同学可以按照下图进行系统性地学习:
同时可以搭配相关书籍进行学习:
1.【 算法第 4 版 】- Robert Sedgewick
适合初学者入门
2.【 数据结构和算法分析- C 语言描述 】- Mark Allen Weiss
需要有一定 C 语言基础
3.【 编程珠玑 】- Jon Bentley
4.【 算法导论 】- Cormen,T.H.
有一定算法基础以后可以去学习【算法导论】。
先把这些基础的算法和数据结构知识梳理一遍,在理解的基础上再去力扣上刷题,可以让刷题事半功倍。
开始刷题
我相信很多刚开始刷力扣的小伙伴打开网站后,面对这上千道难易度层次不齐的题目就懵了,完全不知从何下手。 我的建议是可以先从一些 简单的题目 开始,在题库页面我们可以使用筛选工具将难度选择为「 简单 」。同时还可以添加多个种类的筛选条件,比如我想要刷数组的题目,我们可以再选择一个「 数组 」的话题标签,那么我们就可以从所有的数组简单题开始练习了。这些操作在学习工具页面底部的「 题目列表 」中你也是可以找到的。
或者你可以从 题解多 的题目开始练习,这样即使被某个问题卡住了,也能通过其他用户的优质题解打开解题思路。
力扣题解
力扣题解区高手云集,题解没有最好只有更好,两数之和这道题,你有多少种解法呢?
解题技巧
学习算法要渐次进行,先掌握一类算法,钻研透了再去掌握另一类。俗话说「贪多嚼不烂」。碰到不会的题目可以多去题解区看看其他人的解题思路,将每一道题目吃透。
可以参考力扣君之前发布的一个回答
解题示例
对待每一道题目都应该追求完美,看看同一道题自己能想出多少种解法,其他题目是否可以用同样的解题思路。
比如力扣上的第 3 题「 无重复字符的最长子串 」
题目描述:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
示例 2:
示例 3:
这道题目基本解题思路是 滑动窗口 ,我们是否还可以用其他的解法?做完这道题目以后,再去练习「滑动窗口」相关题目巩固一下:
30. 串联所有单词的子串
76. 最小覆盖子串
159. 至多包含两个不同字符的最长子串
209. 长度最小的子数组
239. 滑动窗口最大值
567. 字符串的排列
632. 最小区间
727. 最小窗口子序列
面试突击
刷题时间不充裕的同学,可以从 【
高频算法面试汇总
】的探索卡片开始刷起,或者从题库页右侧的「热门推荐」开始刷起。
真题演练
题目刷到一定数量以后,如果想测试一下自己在真实面试中的水平可以来一场模拟面试。模拟面试还是相对比较有挑战的,尤其是在有限的时间内能快速 bug free AC 这些题目。
模拟完成后,你也能看到自己详细的面试报告,了解自己的欠缺所在。个人觉得在每次模拟面试时,都要争取全部通过才是最稳妥的,如果没有在规定时间内完成面试题目,面试结束后也一定要花时间将没有做出来的题弄懂,然后再次模拟该企业面试,这样才能在真正面试时有备无患。
此外,面试页面有一个搜索框可以用来搜索各大公司的面试真题。如果你面试目标明确,可以直接搜索想要去的公司进行有针对性的反复练习,争取一举拿下 offer。
说了那么多,还是需要各位程序员们的执行力,在学习的过程中不能只是收藏学习资源却没有实际行动,不要给自己明天再开始学习的念想。
从现在开始准备起来吧!祝愿每一位小伙伴都能在力扣上学有所得,找到自己心仪的工作。
欢迎各位知友关注力扣官方微信公众号:「 LeetCode力扣 」,更多关于程序员面试、技术干货的内容等你来啃!