查看: 9668| 回复: 24
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 【找工求职】1/n 如何开始刷题(求加精)

     关闭
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
这篇是接着前一篇将拿到cs offer之后该怎么做的文章写得,前一篇详见 http://www.1point3acres.com/bbs/thread-350438-1-1.html 我想通过一系列的求职文章来跟大家分享我从入学后开始准备面试到拿到FB intern+return的经验

这篇是招工求职系列文章的第一篇,前一篇是第0篇。刷题是在美国找SDE最重要也是最难最耗时的一步。就像复习托福有很多技巧一样,刷题也有很多方法和策略能让你事半功倍。这篇将从战略和战术两个方面来聊聊刷题的正确打开方式。

## 战略

### 越早开始越好
不要等到说“我这门Java入门课上完再开始刷题”,因为等你上完Java课,一个月过去了,等你开始刷题的时候,Java基础语法又忘记了,还得重新查Java语法。正确的方式应该是从今天就开始刷题,同时可以在上公开课,看书等等。

### 效率最大化
做一道题不是做完,accept就完事,如果想刷完一遍对每题都印象深刻,就要做到效率最大化,一份时间当好几份用,刷一遍达到刷好几遍的效果

- x1 第一遍做
- x2 复习一遍用到的算法,理解题点
- x3 做笔记,下次复习的时候能够快速回忆起来关键点
- x4 分析时间复杂度,空间复杂度,从而思考如何优化

## 战术

刷题,刚开始会很难,即使对于科班出身,也需要时间去上手。最难的是前20道题,因为这个时候,语法不熟,Leetcode系统不熟,算法不熟。但是一旦熬过20题就会感觉变轻松了,如果是按Acceptance做的话,50-70题又是一个坎,因为你会遇到很多新的数据结构,没接触的数据结构直接做会感觉很难。遇到这样的情况就硬着头皮按着战术去做就是。所以下面是战术。

### 如何刷题
第零步,选择语言,建议用Java或者C++,大部分公司不限制面试语言,一些公司比如Amazon会在OA的时候限制只能用Java和C++;选择平台,建议用Leetcode,市面上什么lintcode之类的都是相互借鉴,做一个就好。IDE选择,直接使用Leetcode提供的界面编程。
第一步,按照Acceptance从高到低排序,选题号小于300的做,因为这两年从300增到700题,如果完全按照Ac来做的话前面会太简单,做了100道题可能做得都是easy的,进步太慢。按这个排序做20题,目的熟悉基础语法,熟悉leetcode,不会的就看答案,这里的答案是指Discuss里面的高票回答,看完答案再重写一遍,因为这个时候你不会,基本上是因为语法不会,Ac前20题不会出现复杂的数据结构。

第二步,继续按照Acceptance排序刷接下来的20-50题,每次遇到一个新的数据结构,先查书/wiki,学习这个数据结构,然后做题,做不出来,再看答案,看完重写一遍,会了之后,选择同样数据结构的题横着刷(按Topic来刷,如图)3-4题,这样的目的在于,学习了新的数据结构,马上应用了3-4遍,学习的效率很高。然后再继续按排序做。
![]()

第三部,刷题顺序不变,按照Acceptance,同时夹杂着横刷,50-300,但是因为积累了一定的数据结构,所以开始加入分析数据结构,比如为什么用Linked List而不用Array List,为什么用Queue而不用Stack;分析算法复杂度,包括时间复杂度和空间复杂度;然后就是思考如何优化,时空是否存在优化,以及能否牺牲空间换取时间。
$$O(n^2) > O(n\sqrt(n)) > O(n)$$

第四步,如果按照我说的笔记方法在记录的话,第二遍刷的时候可以按照题号排序来做,夹杂着横刷,这一边遇到不会的先看笔记,一般看了笔记有一点提示就很快能做出来,如果还是想不起来那可以看Discuss然后做,做完把这题作为好题分析去做笔记。

第五步,一般是面试之前,边看面经边按照公司来刷,做到这一步的时候有必要买membership,这样就可以按公司查看。
![]()

上传github,加上一定的注释来解释你的代码,一方面为了刷github上repo和submit的数量,刷绿点;另一方面熟悉git这种collaborate的工具。像第一篇里面说到的,使用github是CS素养的第一步,后面会具体写。

### 如何看答案
点进Discuss,按照vote排序,选择靠前并且使用你用的编程语言的一条,点进去看,Solution是新加的功能,里面一般只有一个参考答案,可以参考。看了别人的答案,高票的一般都很巧妙,并且代码风格都很好,是很好的学习资源,不仅学习他的算法,思路还要学习他的分析等等。看完答案,回去自己重写一遍,重写的时候决不能看答案。

### 如何做笔记
- 易错点记录,只要不是一次过的题,就存在易错点,比如语法错啦,边界条件少啦等等。很典型的递归错误就是忘了加退出条件。这样的错误记录了两三遍之后,就再也不会错了。
- 语法记录,很多常用的语法,比如各种数据结构的初始化比如初始化一个list of list`List<List<Integer>> lol = new LinkedList<List<Integer>>();`,再比如数组排序,以及如何使用compare函数

    ```
    int[] arr = {13, 7, 6, 45, 21, 9, 2, 100};
    Arrays.sort(arr, 1, 5);

    ```
- 知识点记录,给每一类题都建一个文件,推荐Dropbox的paper或者Evernote。按前面第二步的方法做的时候将题目归类并记录。记录的时候,就用一句话记录这题的题号,用的关键知识点,和关键代码,这样的好处是下次复习的时候可以快速想起,比如明天就要面试FB了,今天晚上你不可能做新题了,你就可以看你记录的这些关键点,复习效率特别高。举一个List的例子 https://www.evernote.com/l/AKNd6Oijdz5EaK8aBHfybQGOTLWqTt2isbA
- 好题分析,上一点是每题必须做,这一点是选择性的,当你做到一道题卡了很久,或者学到很多知识点(有好几个follow up),你可以写一篇文章来分析,来记录你是如何一步一步优化做出最优解的。

### 辅助材料
- 数据结构Java书,这两本书是我刷题的时候用到最多的书,遇到新的数据结构的题目,第一步就是先翻这两本书,学习一下对应的数据结构,然后回过头看题目,会感觉豁然贯通。
链接: https://pan.baidu.com/s/1W0-6E316u_nEG3yPOv_GEw 密码: 86k1
wikipedia
- Google,任何问题,先问Google,碰到语法问题,程序报错等等,复制到Google里基本都能找到解决方案



评分

参与人数 34大米 +189 收起 理由
barryyao + 1 赞一个
gongchenglion + 2 很有用的信息!
yy796929 + 1 很有用的信息!
sgm233 + 1 赞一个
hazelzhou + 3 很有用的信息!

查看全部评分


上一篇:在window内做stream join
下一篇:学习算法/数据结构+刷题中的同时在谨慎考虑自己的规划

本帖被以下淘专辑推荐:

推荐
 楼主| ksckscksc 2018-4-10 11:50:25 | 只看该作者
全局:
zilu0907 发表于 2018-4-3 16:45
谢谢楼主分享,另外,看到leetcode上可以用好几种语言,请教一下楼主,刷leetcode用java,C++还是python好呢 ...

推荐你用最熟悉的,如果都得从新开始熟悉的话,推荐java

评分

参与人数 1大米 +3 收起 理由
zilu0907 + 3 加米加米

查看全部评分

回复

使用道具 举报

推荐
 楼主| ksckscksc 2018-3-14 13:11:53 | 只看该作者
全局:
1点50分 发表于 2018-3-14 09:03
首先恭喜楼主,请问你没刷多少题回来复习呢?还是一直刷下去300题 再回来重新做

看你时间多少,我那时候总的也只有200多题吧,我那时候时间紧,刷了150开始复习的。
回复

使用道具 举报

推荐
 楼主| ksckscksc 2018-3-13 14:59:37 | 只看该作者
全局:
oijlkj876 发表于 2018-3-13 12:32
刚刷50题,感觉楼主的经验很实用,期待后面文章

不错不错,50题之后就会刷快起来了
回复

使用道具 举报

🔗
aaaaaria 2018-3-12 22:14:45 | 只看该作者
全局:
感谢LZ分享!!
回复

使用道具 举报

🔗
 楼主| ksckscksc 2018-3-13 00:44:10 | 只看该作者
全局:

恭喜你拿到offer啊,刷题加油!
回复

使用道具 举报

🔗
vtiaocao 2018-3-13 00:46:55 | 只看该作者
全局:
易错点记录不错,先马克了,等会看
回复

使用道具 举报

🔗
mfirestorm 2018-3-13 00:49:03 | 只看该作者
全局:
等lz完成了
回复

使用道具 举报

🔗
1点50分 2018-3-14 09:03:56 | 只看该作者
全局:
首先恭喜楼主,请问你没刷多少题回来复习呢?还是一直刷下去300题 再回来重新做
回复

使用道具 举报

🔗
sjyjya 2018-3-17 00:36:13 | 只看该作者
全局:
太感谢了!转专业刚收到cs offer的路过,觉得很实用。明天开始刷题!楼主好人,不知可否加微信认识一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表