如何做LeetCode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何做LeetCode相关的知识,希望对你有一定的参考价值。

如何做LeetCode :

LeetCode是一个准备面试非常有用工具,但是也有一定的不足,比如只有按照名称一种排序方法。另外LeetCode中的题目越来越多,目前124题,很多人并没有那么多时间去一一完成,那么怎样能够更有效率的进行练习呢?这里谈谈我的想法。

由于以上的和其他一些问题,我利用圣诞节做了一个小小的工具 :

这里谈谈如何使用。

1、如果第一次做LeetCode,你可以按照难度来做。我按照题目的难度和面试出现的频率打了分,1是最低分,5是最高分。你可以按照难度排序,从最简单的做起,逐渐提高难度。


2、如果你有一段时间没有做,而LeetCode加了新题,你只想做新题怎么办?你可以去我的那个网站,上边的题目是按照时间顺序排好序的。你可以很容易的找到新题。


3、如果你没有时间做完所有的题目怎么办?你可以按照面试出现的频率来排序,从高频题做起。


4、如果你已经做了Leetcode两三遍了,下一步如何提高?这个时候你需要一定的总结了,应该按照类型来做,比如按照数据结构分类来做,按照算法分类来做,同时可以参考我的题目总结的文章。

满意请采纳,祝你学习进步。

参考技术A 按分类来做吧,这样子效果比较好,但是要多做几遍,题解可以百度 凌风博客 这是一个专注计算机、互联网的程序员博客 参考技术B 我刷的是Lintcode,已经开始刷第二遍了,结合之前师兄教的方法,讲下个人看法:

刷题建议按类别进行,同一类别的题放在一个时间段刷,提高效率;
比较简单的题直接在编辑器上做,做完直接提交,真实反映自己代码的正确率;
比较难的题尽量自己先想一段时间,想不出来再找标准答案。要研究标准答案,琢磨他的解题逻辑和代码书写方式。推荐九章算法,里面的代码不错,题目很全;
做完题目要总结。特别是不会做的题,看完标准答案建议将相应的注意点包括思路、关键等都整理后记录在册;
定期回顾所做总结,定期重复之前不会的题,直至确定掌握相应内容——这里是指这类题的逻辑思路及这道题的特殊之处。

如何科学的刷 Leetcode

Leetcode 对于学计算机专业的同学,就如 PhotoShop 对于学设计的同学来说,最熟悉不过了。

考虑到读者的范围比较广,先对 Leetcode 做个科普。

它是一个编程实践网站,主要注重于培养使用者的编程技巧,去解决一些巧妙的算法题。

这是它的官网,https://leetcode.com

Leetcode 官网

很久以前,还是在大学的时候,有师兄对我意味深长的说,如果把 Leetcode 上面的题目做上七遍,就有很大概率能够通过谷歌的面试。

虽然有点夸张,这句话还是对我幼小的内心,产生了不小的震撼。毕竟,在当时的我看来,谷歌和赚钱,是同义词。

在 2019 年的秋招之前,我曾经系统的刷过一段 Leetcode 算法题。平均每天做一道,坚持了有三四个月时间,从三月份到七月份。

如何科学的刷 Leetcode
刷题记录,一个格子表示一天,颜色越深表示做题越多

这对我的秋招面试很有帮助,拿到了基本所有一线互联网公司的 offer,没有一次是因为考察编程题吃亏的。而且,其实之前我的算法编程能力也不强。

我的方法观里,有三个重要的点,分别是:

找到科学的刷题顺序学习优秀的解题方案及时整理题目的套路

找到科学的刷题顺序

目前 Leetcode 收录的算题题目,超过了一千道,数量非常之多。同学们也都是很有想法的人,于是,八仙过海,各有各的姿势。

蛮力刷题法 按顺序来,一道一道的做,从 001 到 999,希望自己的编程能力愈来愈强,最终天长地久。该法对吃苦耐劳式同学最佳。

规避挫折法 Leetcode 很人性化的把题目的难度划分为:容易题,中等题,难题。为了避免刷题时候,身心受到打击摧残,只做简单题。该法对心理脆弱、亟需成就感同学最佳。

随机数法 随机生成一个题目数,然后解决这个题目,该法对探险爱好者最佳,毕竟,每一次做题,都是一次惊喜。

与上面阐述的不同,我所推荐的还是,系列学习法:在 Leetcode 上面,算法题目的类型划分的较为清楚,例如数组类、链表类、二叉树类等。刷题时,可以每次挑选一个序列的题目来做。

如何科学的刷 Leetcode
红框中可以看到各种题目类型

例如,我这两天先集中精力解决「链表」类题型,将与链表算法有关的变体,系统的做一遍,不断的强化脑海中与之有关的记忆细胞。

举个形象的例子,如果我去果园摘菜,东摘一颗葡萄,西摘一颗草莓,稀里糊涂的来回转悠。最终我会疲于奔走,篮子里也会杂乱不堪,还得腾出精力来进行整理。

但如果我先把成熟的葡萄都摘取了,然后再来处理草莓,就会大大节省我的整理时间和奔波消耗。

学习优秀的解题方案

刷题的时候,每遇到一道题,我都会全神贯注的思考解题思路,如果能够马上想出来,就动手编程;如果十分钟之内,都没有清晰可行的思路,我会果断的选择放弃。

我平时的工作、任务比较繁忙,不容许我花太多的时间去推敲解题策略。所以,这种方式是无奈的选择,经过实践,我发现也很高效。

需要注意的是,这里的放弃,不是真正的放弃,而是说我会去看别人的解决方案。当然,即使我做出了题目,也会去看看别人的解决方案。Leetcode 的设计机制,很容易能够让我们做到这一点。

每道题目都有一个 Discuss 讨论模块,我们点击进去,会发现,这里贴满了前人发表的各种解决方案,排名靠前的,一般是最为优秀的,或是时间和空间复杂度消耗很低,或是代码实现优美,思路清晰易懂。

一道题目的 Discuss 讨论模板

总之,阅读前几名的方案,我经常觉得是一种享受,时不时会发出赞叹「原来这题还可以这么写」。偶尔会乐在其中,也算枯燥刷题生活的苦中作乐。

及时整理题目的套路

人的记忆,是不断更新、不断遗忘的。做过的一些题目,过了一段时间,可能又还给了 Leetcode。

我很清楚自己生而为人的这种劣势,尽量用科学的方法去加以弥补。俗话说,好记性不如烂笔头,我会对刷过的题目,分门别类的进行整理总结。这个过程,是对出题人套路的深度揣摩,有利于让自己学会,透过现象看本质。

例如,以下就是我刷题过程中的整理的常见套路,虽然不够全,但对我来说够用了,你也可以整理自己的。

另外,Leetcode 也有中文网站,https://leetcode-cn.com


推荐阅读:



以上是关于如何做LeetCode的主要内容,如果未能解决你的问题,请参考以下文章

LeetCodeLeetCode之删除并获得点数——动态规划排序+动态规划

LeetCodeLeetCode之跳跃游戏Ⅱ——暴力解法+动态规划+贪婪算法

LeetCodeLeetCode之跳跃游戏Ⅱ——暴力解法+动态规划+贪婪算法

LeetCodeLeetCode之乘积最大子数组——枚举+动态规划+Kadane算法

LeetCodeLeetCode之乘积为正数的最长子数组长度——暴力枚举+动态规划+Kadane算法

LeetCodeLeetCode之乘积为正数的最长子数组长度——暴力枚举+动态规划+Kadane算法