关于算法:从零到谷歌程序员我的面试刷题心得

47次阅读

共计 4034 个字符,预计需要花费 11 分钟才能阅读完成。

  • 本文作者:易潇
  • 她的 Github:https://github.com/lilyzhaoyilu

大家好,我是易潇,也是 91 算法群里大家相熟的狗头。最近申请和面试根本完结,刚刚过了Google 的 HC

我的本科读的是商学,所以算是 理科转码 0 根底转码 的一员。在这里想跟大家分享一下我面对面试刷题的心得~

注:Google 的招人模式比拟特地,过了 HC 能够视为被 Google 承受并且曾经完结了所有技术性面试,简称过了。具体对于申请 Google 的信息会在 后续的文章 中跟大家分享,敬请期待。

我的刷题状况

在谷歌面试的时候,我大略刷了 550 道题左右:其中大略 150 道简略,310 道中等,90 道艰难。其中有中国站一些剑指和面试经典的反复题。对于前 200 和一些高频题,我刷了两遍以上或者更多。

如上图是我刷图论的模板题。左侧是我的提交记录,右侧是我的代码。

我在四月份之前断断续续的大略刷过 60 道题左右,而后在四月份的时候我新开了一个过程并且开始好好刷题。实现最初一个面试是 7 月 20 日。

刷题心得

依照一个基于 tag/topic 的打算开始刷题

tag/topic 的定义:在力扣题库界面的上方能够看到不同的标签(tag),点进去就能够进入每个标签的列表。

依照标签刷题的益处是它能帮忙你坚固你对某个数据结构的了解,并且一直的改过和提高。

网上有很多大佬分享过刷题程序和题单,或者你也能够本人创立一个列表。我感觉不必太纠结“到底哪个列表最好”,作为一个刚开始刷题的人,明天先学 A 或者 B 一般来说影响不会太大 — 反正到最初都是要学的。最重要的是“开始学”,不要胆怯打算不完满。打算必定不会是完满的,是会随着本人的认知和进度而修改的。

对于我集体来说,我侥幸的加入了力扣加加举办的 91 天算法。91 算法要求每天一起打卡一道题,并且每个礼拜的题都是围绕一个数据结构。这样 依照一个标签集中刷题很好的验证本人对某个数据结构的常识并且修改了本人一些谬误的认知。

建设一个有正向反馈的 Todo List

为什么我这么举荐依照打算刷题呢,还有一个起因是 Todo List 是一个很不便建设正向反馈的工具。为什么建设正向反馈很重要呢 — 你如果打过游戏,那么你肯定有过“呀就打了一会儿游戏怎么就这么点啦”的感觉。打游戏的时候工夫过的飞快就是因为大多数设计好的游戏都会一直的给予玩家正向反馈。同理,咱们想要始终刷题,那么就要给本人发明一个有 继续正向反馈 的环境。

Todo List 就是这样一个工具。我刷题的时候应用的是ipad + goodnotes + ElenaLin_青青的电子手账模板 + apple pencil。一般来说,我每天会制订第二天须要做什么事件,并且尽量把它拆分成小的、容易实现的步骤。比如说我想学习字典树,那么我就会把打算拆分成:

  • 看 91 算法的字典树专题
  • 写 91 算法的字典树模板题 LC208
  • 写 91 算法的字典树举荐题

    • LC211
    • LC212
    • LC472
    • LC648
    • LC820
    • LC1032
  • (如果还有精力)做力扣上字典树标签里的高频 5 道题

一般来说,除了学习某个专题,我的一天还会有一些其余事件,比方打卡 91 算法每日一题,打卡力扣每日一题,看邮件,投递申请等等。大部分时候,我起床之后坐在电脑前,都本能的感觉“太难了”,以至于“我不想干”。每当我有这种感觉的时候,我就在所有的待办事项当选一个我感觉最容易实现的我的项目并且开始做。换句话说 — 别想那么多,兄弟,冲就完了!(好吧我是个 fps 游戏玩家)。我个别会抉择先做 91 每日一题,因为它不会太难,而且打卡了之后会被其余刷题小伙伴看到,这让我有种感觉本人很棒棒的感觉。只有开始建设 “克服困难”->“执行工作”->“实现之后感觉本人很棒棒” 的行为模式之后,所有都会变得简略起来。

ElenaLin 的电子手账应用教程可参考这个视频 https://www.bilibili.com/vide…

贴一个我中期的日程表,这个时候我曾经建设了比拟好的循环,所以会看到每天实现的工作多了起来,而且我也曾经不太依赖“在实现每个工作之后划掉”这个动作了。我的笔记也并没有很整洁或者好看,只有本人能看懂就能够。

当然,在工具上不肯定要跟我一样。本子和笔也能够。不过我强烈推荐用一个本子,因为周末和月末的时候回顾看看也会持续加深下面提到的有正向反馈的行为模式。

学会站在伟人的肩膀上

一道题看 10 分钟 如果没有思路就不要太浪费时间在谬误的办法下面,学会看和学习他人的题解。

个别力扣解题区的 高票题解 都很好。一个题解如果看不懂也没关系,首先照着它写一遍,而后通过各种打印和调试搞清楚每一行代码都是在做什么;如果还是不分明为什么,能够把某一段代码正文掉再点提交。这个时候零碎会报错,你再拿着这个输出一行行的剖析题解,就能明确这一段代码在做什么、为什么必须要存在在题解里。(这样提交成功率会变低,然而变低又怎么样呢,咱们的指标又不是成为提交成功率最高的仔)。

当然,问其他人也能够,然而我更举荐带有具体目的性的发问,而不是“这道题怎么做?”这种宽泛的问题。一般来说,问题越具体,越好答复,被答复的几率越高。

数量还是品质?

其实都须要。肯定的数量是熟练度的保障和见过大部分题型的根底。

熟练度在面试中很重要:面试一共那么长时间,其余条件不变,写代码越快,能做的其余事件就越多。其余事件能够是多跟面试官交换,答复一些 follow up,做一些优化等等。这些都是面试加分的我的项目。

见过大部分题型也很重要:见题型多的 实质其实是对于某一类问题是否更好的形象。比方对于堆来说,91 算法始终强调它的实质是“动静求极值”。刚读完我是不了解的,做了一道题我可能略微有点了解了,做了三道题我就会感觉“哇塞还能这样,哦果然能这样!”领有形象问题的能力就等同于领有以不变应万变的能力,在遇到没见过的题的时候就能够不慌。在面试中遇见原题的概率的确也不大,所以锤炼形象能力很重要。

当然,刷题的品质也重要。当咱们说刷题的品质的时候,咱们在说什么呢?我感觉品质是指:一道题是否真的了解它在求什么。对于每一种这道题可能的思路,使用了哪些数据结构,用这种数据结构的劣势和劣势在哪里。比方两数和,哈希表是常见的工夫优化解法。这里利用了哈希表能用 O(1)工夫取得对应 key 的值的个性,就义了空间复杂度,而优化了工夫复杂度。

温习和反复

温习和反复是很重要的,毕竟“孰能生巧”嘛。对于我来说,每个数据类型的模板题是我写的最多的,多到我能一遍过的根底上每隔一段时间还要刷一下。我在面试之前对于每个常见的数据类型都有本人喜爱的模板写法,并且能依据每道题对模板进行改良。

我记得我过后学堆的时候感觉太难了,我就照着 91 算法讲师小漾写过的堆写了一个礼拜 — 就是从早到晚始终写的那种一个礼拜。之后我常常打趣说 “就算你中午三点把我拉起来让我手写一个堆都不会有任何 bug”。 凑巧的是,我在面试某个 pre-ipo 公司的时候就考到了跟堆相干的常识。过后的运行环境是 hacker rank,须要把代码跑进去并且通过实例(注:并不是每个公司都要求代码能在环境中运行,有的公司面试更像在白板上写代码)。我当即给面试官表演了一段速写最大堆,因为太熟了,所以行云流水零打碎敲。写完了之后我发现两位面试官的眼睛放光,起初 recruiter 被动反馈说面试后果十分十分好。在给 offer 的时候给了比申请的级别高了一点,而且最初谈薪资的时候还被动加了 12%。

有很多一起刷题的小伙伴

刷题,尤其是一开始刷题,都是令人感到艰难的。很多时候这件事并不难,然而这种“好难啊”的感觉才是真正妨碍咱们开始的货色。当有了很多小伙伴的时候,有了四周人的压力和激励,这种感觉会削弱一些。

刷题的中后期也会常常感到迷茫和焦虑,有很多小伙伴也能很好的加重迷茫感。甚至很多时候,因为刷题群、技术群里很多大佬都上岸了,大佬们还会分享职位信息,堪称是两全其美。

对于我来说,我在决定要刷题的初期在网上加了很多技术群和刷题群。在我刷题的大部分工夫里,我每天早上睁眼看微信都是一页的刷题群未读音讯。每次看到这个,我就有种我也要连忙起床刷题的紧迫感。每次刷题感觉郁闷了,去群里跟大家聊聊天相互激励,也会一会儿就感觉元气满满。

在哪里找这些群呢 — 力扣题解区有一些沉闷的大佬们的刷题群都不错,力扣的讨论区也常常有人拉刷题群。

适应面试环境

就算是算法面试,和在家本人悠闲刷题的感觉还是不一样的。算法面试要求疾速的锁定思路并且进行精准打击。(呃,如同游戏打多了 …)这方面我强烈推荐力扣的周赛和进行一些模仿面试。模仿面试能够找敌人,也有一些提供相似服务的网站。我在 interviewing.io 模仿了三次,感觉还是挺有用的。

我当初的比赛分大略是 1780。已经我也很焦虑的问 Lucifer 比赛 / 面试一缓和没思路怎么办。Lucifer 的回复很简略也很无效:“先打 20 场再说”。

Just do it

“先打 20 场再说”是面向面试刷题中最重要的指导思想了。 开始总是让人感觉十分艰难,然而事件往往没有想的那么难。我也经常因为胆怯本人“做不好”而节约很多工夫在寻找“最完满的”开始办法上 — 实际上,当一个人开始学习某一项技能的时候,大概率这个学习办法是不完满的。所以如果你也想开始面向面试刷题,请把它想成一款游戏 — 先开始打了再说,打了之后再依据需要和网上的攻略调整本人打游戏的形式就能缓缓变成大神啦。

爱心三连击

  1. 看到这里了就点个在看反对下吧,你的在看是我创作的能源。
  2. 关注公众号力扣加加,获取更多算法硬核文章!加个星标,不错过每一条成长的机会。
  3. 如果你感觉本文的内容对你有帮忙,就帮我转发一下吧。
  • 后盾回复:「电子书」,获取我精心制作的算法刷题电子书(20+ 万字)
  • 后盾回复:「背包」,主动获取《背包九讲》pdf
  • 后盾回复:「脑图」,主动获取我制作的算法脑图总结
  • 后盾回复:「刷题插件」,主动获取上万人都在用的力扣刷题插件

另外你还能够回复具体的算法专题获取相应的文章,比方「二分」,「堆」,「树」,「链表」等等

正文完
 0