LeetCode刷题技巧

虽然大多数经验你们大概也在互联网的这里或那里看过,不过我还是摆在这里吧。更系统一些,也许能帮到一些朋友:

  • 最重要的是行动,现在立刻马上就去开始刷题。
  • 一看二抄三改四写。
  • 前期博客、文档、ppt比算法原理书重要。如果要学会用算法,书不够看也没必要,应该刷题。刷题时,首先还是要有方向、有脉络地刷题,切忌乱打拳,也就是要刷专题,刷专题就是说,找同类的题(一次只针对一种题型进行训练,如数组、链表、二叉树、回溯、动态规划),对题解打,逐步脱离题解,直到能自己做同类的题。
  • 切忌眼高手低。不要想着自己知道思路解法了就是会了,一定要亲自Coding,手撸出来。我在刷的过程中就经常在Debug的时候才发现自己忘记考虑了某些条件。不把代码写出来,只看别人的答案对自己是没有多大的提高的,只有亲自AC了题目,才能算做过一道题。
  • 可能刚开始会对手撸代码有压力有恐惧,总结就是心态一定要硬刚,总共就那几种题型,我刚开始也很抵触的,觉得太难了,后面迎难而上也就那么回事。第一遍不行就第二遍,不然就第三遍,直到现在***里面也有一些我不懂的题目,但我也不会去深究,大局为重,不抠细节。
  • 关于书:敲一个算法是编程能力,是简单的;但算法能力在于总结归纳一个算法(这个太难了,《算导》更加像是讲这个)和把问题与算法联系起来(这个应该培养)。如果要看书的话,按照书里面的算法一个一个学,每学一个算法之前找好几道使用这个算法的题(如果有个内行人带的话这步就很好做了),最好能有难度进阶。在学了算法之后立刻想这些题应该怎么做,然后做出来。
  • LeetCode上很多题目不仅需要一定的语言基础,毕竟gg,ms的面试题大都是这里面的,所以需要有数据结构,算法的基础,可以先撸完链表,STL相关的题目,去学数据结构再继续做吧。也有很多题目都是考查思维能力。而且这些题目需要你不断的去优化时间,空间复杂度,而不是简单的获得一个Accepted.
  • 如果不用肝竞赛没压力的话就最好了,就静下心来好好看看题解是怎么读透和解决一个题的,才是真正的ac。
  • 关于刷哪些题,和刷题顺序,建议按这个顺序刷题"Top 100 Liked Questions" -> "Top Interview Questions",这两个List中有很多重复的题,加起来一共150道左右。都是经典的题目,将这150道刷完基本上所有的题型都见过了,而且多数经典题目都会涉及,是提升最快的一个方法。
  • 然后就是各个大公司的题目,首选Amazon的,然后可以看看Zenefits的,接下来就是Google和Facebook的挑着刷。然后都是从简单到难的顺序刷。
  • 做好Easy,没必要死扣Hard。LeetCode上很多Easy的题目看似简单,实则想要写出Perfect的代码并非易事。多思考如何优化Easy,Medium的解法实际上比花精力解Hard题更能提高自己。况且面试的时候Hard被问的概率太小了。
    另外,一定要时常复习刷过的题,复习比一味的追求数量更重要。
  • 关于怎么总结归纳,总结归纳些什么:
    • 这里推荐一个龟派笔记刷题法,每道题都不是简单的刷一遍就过去的,而是反复练习,直到代码最优,解法最优(有时候甚至觉得自己的代码精简到一个符号都无法减少的地步)。用这个方法刷完题去面试,有时候面试官问问题,问题还没说完,你就知道应该如何表述自己的心路历程,然后慢慢地给出最优解。

-----------------------具体操作方案-----------------------------

  • 对于遇到的每个题目,事后都做上标记:普通题目,难题、好题。
  • 每个题目都分为以下几个步骤做好详细的笔记:
    • 原题目
    • 自己的第一遍解法
    • 网上好的解法
    • 自己可以改进的地方
    • 进一步精简优化自己的代码直至代码简无可简(这是非常关键的一步,到达这一步,才会发现获得能力的提升远远要超过简单地把题目解出来)
    • 获得的思考(或者学习到的地方,可以是算法、数据结构或者Java的特性—例如Stream等等)

然后​​注意积累工具类算法。
什么叫工具类算法?就是你解一道算法题需要用到另一种算法,这个被调用的算法就是解决这道算法题的工具。​常见的比如:

  1. 「深度优先遍历」
  2. 「广度优先遍历」
  3. 「01背包」
  4. 「KMP算法」
  5. 「LRU算法」
  6. 常见的选择和排序算法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值