Leetcode学习

1. 刷题方法

  自顶向下 VS 自底向上。两种方法各有优劣。那怎么才能达到最好的学习效果呢?

  入门时使用自底向上的学习方法,以玩游戏为例,了解了基本的游戏规则,然后就先玩起来,在玩的过程中逐渐熟悉。但这样的玩法,必然会在一定阶段遇到瓶颈,问题的本质在哪里,那如何解决呢?

  深入时再对对应的章节采用自顶向下的学习方法。比如通过阅读算法的参考书籍,如图解算法、算法(第4版)。

1.1 第一遍(第一次梳理思路,可依赖)

  自己独立思考,理解题意,明确边界条件。基础薄弱(刷题少于100道)的同学,思考时间不超过15min。基础稳固后,思考时间不超过5min。如果有思路,先比较几种思路的优劣,然后写出每种思路的伪代码(等到一定层次时,只需要写出最优代码的伪代码)。如果没有任何思路,不知道从何下手,则直接看解法。同时注意比较多种算法的优劣。

  学习算法最重要的是理解。如果没有思路,学习别人思路以后,首先要把思路和关键点列出来。如果暂时做不到,那就通过背诵、默写好的解法或者思路(前期实在不会,可默写或者背诵具体代码(1~2种实现代码),后期以理解思路为主)。最后一定要用语言表达出解题思路。

1.2 第二遍(实现)

  在不参考代码的基础上,将多种思路进行实现,并在Leetcode上提交,不断Debug修改。

  如果最优算法也未能战胜前80%的人,则跳回第一遍,看别人的优秀代码,分析具体原因(是算法架构不对,还是实现细节不好)。然后实现代码,并提交Leecode。

1.3 第三遍:(在第2遍的基础之上,过了24小时之后,做前一天做过的题目)

  首先假设旁边就是面试官,把基本思路给面试官讲解一遍。然后重复实现一次最优代码。并阅读新的一个实现代码,并进行客观评价(时间和空间复杂度、实现细节等)。

1.4 第四遍(第3遍过了一周之后,反复回来练习相同的题目,同时对于不熟练的题目进行专项练习)

  首先假设旁边就是面试官,把基本思路给面试官讲解一遍。然后重复实现一次最优代码。并阅读新的一个实现代码,并进行客观评价(时间和空间复杂度、实现细节等)。

1.5 第五遍 (总结归纳)

  可在参考教材、视频的基础上,对已有的题目进行归纳总结。

1.6 第六遍 (针对面试,面试前一个星期、两个星期进行恢复性训练。)

  复习知识图谱(知识框架),然后将之前容易犯错的题目再做一遍。

2. 做题要点

  1. 理解题意(如果是现场面试,则要和面试官多沟通,确保理解题目准确)
  2. 枚举方案(列举所有可能的解法),比较不同的方法时间、空间复杂度的区别,从中找出最优解法。
  3. Coding 写代码(最优方法)。
  4. Test cases 通过测试样例来进行测试。

算法
数据结构

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章