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

[其他] 业余时间从算法0基础刷题,到面试拿offer的一些经验

   
全局:

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

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

x
我刷题的时候已经在工作了,所以只能用晚上周末刷题,利口也进入千题时代,我真的没有办法像大牛那样刷满1000道题,遂分享一些刷题经验,希望能帮到跟我差不多背景的朋友


背景: 我是EE的背景,没有学过算法课。之前的工作需要的算法也非常少。
语言: python, 现在很多公司都可以python 面试,因为代码好懂,行数也少。当然偶尔也会有一些面试官,明显表现出鄙视。
目标状态:面试基本没问题,并不是达到所以题都可以秒,也并不是开始写就bug free。只是现在看到题,基本能知道要用什么样的算法,会有哪些常见edge case。然后在代码基本实现的时候知道时间复杂度和空间复杂度。


刷题时间线:
前两个月按照分类刷,典型题目刷两遍。我是受到花花酱的视频启发
https://www.youtube.com/watch?v=NxGWDh-0jAg&feature=youtu.be
也是按照他的题目分类,刷的前两遍题, 并且直接略过了所有DP.
https://docs.google.com/spreadsheets/d/1SbpY-04Cz8EWw3A_LBUmDEXKUMO31DBjfeMoA0dlfIA/edit#gid=126913158


第一遍刷题的时候很累,很多题看到都不太会做,非常抓狂,记住万事开头难就好了。10分钟,不会做就看到答案,答案看不懂就找视频讲解的一步步过。把一个题型的基本类型刷熟之后,变种刷起来会很快,也慢慢就知道不同的变种有什么区别
举个栗子:binary search 里面rotated array 的各种问题,一起刷,很快就能知道他们的区别了。


第二遍把大类的常见题又刷了一遍。类似于LRU, All O(1)这种edge case多,代码复杂的,可以刷面经的时候再强化一下。


然后开始投简历刷面经,一次可以准备面大概2家, 把leetcode tag 高频和近期面经都刷一下, 高频DP这个时候看一遍,实在遇到不会做,就brute force,完全没思路,就央求面试官能不能换个题。
我建议如果你像我这样也是小白,不要盲目追求地里那种3,5个offers 拼出的大礼包,慢慢面,积累经验,量力而行。
现在面试感觉bar不低。


后期刷题就不要盲目追求速度,试着根据面试节奏,一步步的来。要以面试遇不到原题来准备。
  • 先想最直接的解法。
  • 然后看看怎么用算法/数据结构优化。
  • 开始写题,考虑edge case.
  • 不要用电脑跑答案,自己手动验算



面试:
每个公司面试都有一些区别。以下是我的个人经验,可能因面试官不同而大相径庭。
比如airbnb, 需要代码能上机跑过。请把所有题库和变种都bug free就好了,45分钟,有follow up,看好时间,尽量少bb,快点开始写代码。


比如google,题库很大,面试也在乎交流,很难遇到原题。
看到题先想一下,提出算法, 再大概讲一下思路,面试官如果给反馈说不够好,一般两种情况:
  • 算法不对,根本无法解题。这时候如果实在没思路,可以套算法,一个个过,千万别急。
  • 不够优化,这时候再没有思路,我会提问类似:你觉得是时间复杂度上可以再优化还是空间复杂度?



然后开始写code, 这一步请你一定要练到知道算法就大概能写出完整框架的状态
比如: BFS要用queue, DFS 需要反复call一个function,并且有end case.


然后请自己跑一些test case, 以及常见edge case, 比如empty input,或者array只有一个value。
之后再检查一下时间空间复杂度,可能和预期有出入。


到这时候,面试估计时间也快到了,如果觉得时间不够验算test case, 可以跟面试官说,我能不能先walk through 思路,再跑test case.


另外就是现在可能会考一些莉蔻不怎么常见的数据结构,比如treemap, bitarray, 可以再看看。


再bb几句:
1,前期追求算法可以看中文解析,用中文解题,后期请尽量用英语来想问题,甚至可以试着用英语表达。我刚开始面试有好几次都是知道算法,没解释清楚,面试官感觉一头雾水。
2,提到package问题,我为什么说不用盲目追求包裹,其实大部分公司之后升职/年底也会再给股票,所以如果你不是面senior职位,多几万少几万其实差距不大(考虑到加州的税)。
3,面试要靠经验积累,挂了再面就好了,我面了大概6个公司,明显能感觉到越到后期,临场表现能更接近平时的真实水平。
4,我遇到的最高频的算法, dfs, bfs, union find, recursion. 比较麻烦的数据结构:double linkedlist(各种cache, put/get 减少时间复杂度的题).

评分

参与人数 36大米 +155 收起 理由
lsxzll + 3 给你点个赞!
lemoncorn1123 + 1 很有用的信息!
admin + 100 刚发现你的另一个帖子非常棒。匿名没法加分.
helloljw222 + 1 很有用的信息!
axe4f5 + 1 很有用的信息!

查看全部评分


上一篇:如何应对在刷leetcode时不能将思路与数据结构与算法联系起来
下一篇:小白刷题经验+感悟 内附领扣刷题推荐顺序
推荐
 楼主| duanj99 2019-10-10 00:29:01 来自APP | 只看该作者
全局:
yanjinbin 发表于 2019/10/09 17:41:34
楼主 速度 挺快的 400道 2个月做完的吗?
差不多,周末多做一点,按照类型刷比较快
比如graph search,其实做个3,5道,后面的变化就主要是edge case了
回复

使用道具 举报

推荐
kuboy 2019-9-4 15:27:00 | 只看该作者
全局:
gxy1103204 发表于 2019-9-4 01:52
我和你一样哈哈,我一道题要查十几个解析才能大概看明白。感觉自己脑袋里全是水。。。

握爪,我昨天上午做187. Repeated DNA Sequences,看起来不难啊??暴力枚举容易理解,但面试肯定不是考察这个啊,再翻翻答案,奥呦?位运算,二进制,nb,看着也不难但实际上按着思路在纸上模拟了一下,也浪费了不少时间,时间来到了下午,正当松了口气,又看到个 rolling hash,完了,看不懂, 挨个翻答案还是不懂,谷歌百度半天,到现在了,一整天过去了啊啊啊啊啊,虽然我知道就是字符串映射成数字,为防止溢出还要取模,但是不同的答案是有细微的差别,你这个答案还没看懂,发现另一个答案有一点和这个不一样??在看个答案又有点不一样??我擦??懵了,一个问题成了三个问题,哪个是最优的?我该用哪个?都理解一下?都理解不了。。。。
回复

使用道具 举报

推荐
kuboy 2019-9-2 19:05:02 | 只看该作者
全局:
本帖最后由 kuboy 于 2019-9-2 19:10 编辑

为什么你们都这么厉害,你们就没有那种,看了答案都要2天才能搞懂的题目么。。。。是不是我逻辑能力比较欠缺,难一些的递归就想不明白返回到哪一步,我要跟着每一层调用走一遍才能弄懂,非常耗时。我按频率刷的,看了下8月份我才刷了60+题目,太难了啊啊啊。很多题目看别人的代码也得跟着走一边才能弄懂啊,有的解答看不懂,要从代码推逻辑,难啊难啊,我几乎三四小时搞不定一道题。
stefan的代码我已经不敢看了,理解起来太耗时了。。。而且我总喜欢看看c++和java的代码,经常会有两三种解法,都理解一下,一天一道题。。。。啊啊啊,我都准备了4个月了,才做了80+道题,不好意思,不是一天一道题,是2天一道题

评分

参与人数 1大米 +2 收起 理由
gtiug111 + 2 哎我也是, 有的hard题, 三天才理解别人的思.

查看全部评分

回复

使用道具 举报

🔗
pxu 2019-9-2 01:21:11 | 只看该作者
全局:
对于你说的“完全没思路,就央求面试官能不能换个题”,我以前看到的思路是实在没思路,也要尽量想办法分析出大概。可以说说你在面试中提出换题,面试官的大概回复吗?谢谢
回复

使用道具 举报

🔗
 楼主| duanj99 2019-9-2 01:27:02 来自APP | 只看该作者
全局:
pxu 发表于 2019/09/02 01:21:11
对于你说的“完全没思路,就央求面试官能不能换个题”,我以前看到的思路是实在没思路,也要尽量想办法分析出大概。可以说说你在面试中提出换题,面试官的大概回复吗?谢谢

遇到过一次,是一道二维 DP的题,brute force思路说出来了,代码量太大,还可能有BUG。
问面试官是不是一道DP,他说可以尝试,我说不会DP。

补充内容 (2019-9-1 17:28):
面试官就换了一道简单的题
最后面试没过,不知道是这一轮还是system design
回复

使用道具 举报

🔗
orzkuo 2019-9-2 02:18:10 | 只看该作者
全局:
如果碰到原题应该是直接写出来秒掉还是假装没看过花点时间思考之后写?
因为如果直接写出来可能面试官会觉得你之前写过原题
如果假装没做过会浪费时间可能也没时间做follow up或是第二题
回复

使用道具 举报

🔗
 楼主| duanj99 2019-9-2 10:50:45 | 只看该作者
全局:
orzkuo 发表于 2019-9-2 02:18
如果碰到原题应该是直接写出来秒掉还是假装没看过花点时间思考之后写?
因为如果直接写出来可能面试官会觉 ...

我自己面试经验来说的话
airbnb上手就给了我一张纸,让我直接读了上机写答案,我觉得这种就可以直接开始写,不用装了。
像其他公司白板的话,就一定要先讲算法。

怎么减少时间呢? 现在的bar来说,就真的得靠多刷题了。
基本上知道算法了,到代码主体写完,一定要压缩到10分钟..
45分钟的面试,15分钟聊题, 10分钟写主体,10分钟edge case +跑test, 差不多就是这个节奏.
回复

使用道具 举报

🔗
自由马甲 2019-9-2 11:14:58 | 只看该作者
全局:
楼主最后拿了哪家的offer?
回复

使用道具 举报

🔗
benshou 2019-9-2 13:49:45 | 只看该作者
全局:
同好奇,最后去了哪家?
回复

使用道具 举报

🔗
shizen 2019-9-2 13:56:49 | 只看该作者
全局:
楼主你的意思是刷了两个月的题然后去面试了是吗
那你大概刷了多少题呀
回复

使用道具 举报

🔗
 楼主| duanj99 2019-9-2 15:02:24 来自APP | 只看该作者
全局:
shizen 发表于 2019/09/02 13:56:49
楼主你的意思是刷了两个月的题然后去面试了是吗
那你大概刷了多少题呀

第一遍大概两个月,还有第二遍和刷面经呢。
回复

使用道具 举报

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

本版积分规则

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