leetcode 刷了 300 题。
建议题主先把二叉树的各种遍历方式先写一遍。
递归这个思想要了然于心。
碰到递归就要想想能不能反过来求解,类似于动态规划。
碰到动态规划想想能不能变成贪婪算法。
建议先把伪代码先写好,分情况讨论,然后再写代码。这点非常重要,面试的时候 debug 时间过长很不好。
状态可以用哈希表来记录。有的时候状态数目比较少可以直接用数组来记录。
了解一下补码反码等概念,知道一些操作的基本用处,比如异或,移位。
注意总结,比如说 two sum 这个题,可以把加法变成乘法,变成任何操作。
了解状态机这个概念,一些题目状态太多,思维容易混乱,用状态机来表示简洁明了。
leetcode 上有一些实现数据结构的题,试着实现并打败大多数人。
建议用 c 语言写字符串的题。一些用到哈希表,优先队列的题可以用 Java 等高级语言(c 语言也有,高级语言方便一点)。
所谓的高效不是我今天写了几道题,而是我能想起几道题。开始写代码遇到阻碍是正常的,但是阻碍才是成长,天天练习一加一等于二一点成长也没有。
编辑于 2019-05-21
九章算法
ACMer
2,012 人赞同了该回答
先说下我自己的情况,刷题量2000+ ACM金牌,曾担任脸书面试官,总结了很多刷题的方法套路。几年来,我也一直在迭代和优化最短时间内搞定数据结构和算法的方法。
时间充裕的话,不妨花两个小时看下我录的关于如何刷题的视频
疫情下,如何快速拿到大厂offer!_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com
就像题主问的,如果只是应付面试,那么下面这张图就给出了答案。
《九章算法班》版权所有
颜色越红,表示面试中碰到的概率越高,越要优先掌握的算法和数据结构;灰色的基本不考,这部分可以先放一放。
可以参考我整理的面试常见知识点的考察频率来刷,300题基本覆盖了80%以上的面试算法问题。
你可以在LintCode上按照算法和数据结构类型来筛选对应的题目,然后按出现频率从高到低的顺序来刷。题目的答案,你可以在 Lintcode参考答案查询 上找到。