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

[Leetcode] 【9问9答】国内211本,算法渣,工作3年在职刷题,8个月成功收巨硬offer

全局:

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

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

x
【楼主背景】国内211(非985)本科,国内工作3年,在拿到巨硬offer前算法只会冒泡排序和TwoSum级别。
【注】这是本人经验贴,如有大神发现不严谨地方,希望共同讨论。写经验回馈地里,也算是自己阶段性胜利的标志。

【问1】这种水平,只会冒泡排序,算法刷多久可以到巨硬、亚马逊?

【答曰】这个问题因素很多,
  • 首先,典型来讲至少熟练掌握常见算法(暴力、动归、贪心、回溯)和数据结构(栈、图、树)脱手而出,而且要理解为什么要用这些方法?在什么情况下会用到这些方法?
  • 其次,逻辑能力,这个属于辅助能力,清晰的逻辑能力能帮你“快速”、“快速”、“快速”地抓住问题的核心,解法的线路。如果逻辑能力不好,典型特征就是很难提炼题目内容,看了解答抓不清楚主次。这个东西如果说专门培养,可以找逻辑类的课程来提高,但是时间所限,就全心全意投入刷题,题感到了,也能达到相同效果。
  • 然后,刷题时间,每天至少能持续贡献2小时。楼主每天都是早上6:30~8:30,晚上8:30~9:30刷题,花了8个月时间,中间有间断。在职确实很辛苦,没办法,nopain nogain。


【问2】蠡口刷多少题?
【答曰】这不应该是刷题的目标,也不应该是算法能力的评价标准。我们刷算法的目标应该是对题型分门别类,对症(题型、约束)下药(思路、方法),做到药到病除的效果。这与数量无关,与质量(对题目的理解剖析)有关。可以说做过的中等题5秒钟思路闪现,5~10分钟编码bugfree。如果非要说个数字,前300是基础,300~500属于提升。

【问3】蠡口该怎么刷?直接看答案还是自己先想再看答案,还是说其他呢?
【答曰】刷题方法应该服务于不同的算法认知状态,我给出几个典型状态以及我的方法,仅仅是个参考:
  • 状态1,无知态,会用C++/php/java等写if...else,while,递归。做简单题,Math类和String类,此类题型比较单纯,可以先自己思考,再看答案。往往就是问题、子问题的形式,重在形成自己的思考方式。
  • 状态2,懵懂态,给出一道Math和String的简单题,暴力法有思路。此时继续做简单题,熟悉常见算法(暴力、动归、贪心、回溯)和数据结构(栈、图、树)。这种问题也可以先自己思考,写出暴力解,然后看看人家如何进行优化的。如果说你想不出来暴力解(30分钟还没思路),没关系,直接找本类型的典型例题,度娘或谷歌有很多,看懂后再下手。俗称,先把别人的学到手,再看自己怎么办。重在形成自己的思考方式。
  • 状态3,入门态,对基本提醒套路有所了解,但是缺乏大量的练习,此时你要做的就是,stop,stop,stop。把你做过的所有简单题,天天看,至少看5遍,达到做过的题思路1秒浮现,2分钟代码bugfree。
  • 状态4,爬升态,在状态3之后,开始做中等难度的题,可以选择按分类,也可以不按分类,看个人心情。此时你会发现,中等题也就是简单题的思路叠加,但是有些题好难想到,为什么?因为缺乏训练,所以也把这个阶段称为爬升期。
  • 状态5,中等态,在状态4的基础上,把你做过所有的中等题,天天看,至少看5遍,达到做过的题思路10秒浮现,10分钟代码bugfree。
  • 状态>5,我还在进行中,无法评价。



【问4】为什么有时候很看重bugfree呢?
【答曰】这意味着你的逻辑思维,推理是完整的,自圆其说的,对基本算法概念有清晰的认知(数据分类,边界条件)。雇主想找的是一个能够思考较为完善的员工,如果出现边界问题,代码质量可见“一般”。这里强调,不是说一遍写完没有bug,是说你提交给面试官时最好别有bug。


【问5】我应该只追求最优解么?
【答曰】一定是no,克努斯说过,暴力解没思考清楚,别搞什么优化解答。我认为正确地姿势应该如下:
  • 如果你能直接一眼看透题,就有“优化解”的感觉,好了,直接去做吧。
  • 如果不能,先想想这个题的暴力解,然后逐渐优化到最优解,然后看看其他人是怎么写的最优解。推荐大家看看windliang和liweiwei1419的答案解析,比较完整的从0到1再到100的过程。
  • 有些情况下,最优解反而很碍手,比如kmp或者数学公式这种东西,记忆成本很重,真正理解很花费时间,建议这种接法直接过,性价比太低。


【问6】别人出offer了,只刷了200道题,别人会用5种方法,自己为什么1种也不会?
【答曰】心态一定要平稳、平稳、平稳。不知道就学,不要钻进牛角尖,”为什么为什么“出不来


【问7】你认为算法有什么思维套路么?
【答曰】这算是我的核武器了,不喜勿喷。
  • 大问题划分为子问题。例如,问maximum subarray,那这个问题可以分解为求以每个元素为终点的子序列最大值。
  • 分类讨论,分步进行。例如,问maximum subarray,首先,问题可以分解为求以每个元素为终点的子序列最大值;然后累加和分为负数和0(我不需要的),正数(我需要的);遇到当前<=0舍弃,>0时比较大小。我写的很糙,只是想告诉大家有这么个思想在里面。


【问8】靠前好焦虑,刷了300道题,不知道怎么复习?
【答曰】没做到大事(300)化小(题型分类),小(题型分类)事化了(思维模式),不了(思维模式)了之(训练的自信)的状态。多总结,多归纳!!

【问9】巨硬是怎么面的算法?
【答曰】我清晰记得,某一面算法,我真的不知道怎么做,当时就优点慌。无奈只能先写暴力解。然后面试官提示你看看哪里重复运算,我说可以优化那里。面试官又问,怎么样可以做到再次减少运算,你看xxxx,我说你可以优化那里。每个“那里”都是刷题时自己静下心来体会到的门道。面试官更看重二人合作,共创美好家园,而不会因为你写了暴力解或者直接最优解就对你一概而论。


如果觉着有帮助,还请能赏些米,造饭吃~~冬天又冷又饿,北漂蚁族真难。。。。

评分

参与人数 6大米 +27 收起 理由
VielErfolg + 1 赞一个
14417335 + 20
a250151700 + 1 赞一个
zhuge + 1 赞一个
想吃香椿芽 + 2 给你点个赞!

查看全部评分


上一篇:【干货】FLAG面了200+的面试官告诉你算法面试不是只有刷题这么简单
下一篇:restful api 和 http request的区别
🔗
christina233 2020-11-22 09:08:25 | 只看该作者
全局:
有一说一,微软面试难度本来就不难。
而且微软给的钱真的很少,在北美市值top10的IT公司里微软给程序员的钱应该是最少的了。。。
回复

使用道具 举报

🔗
Michaellikp 2020-11-22 11:59:11 | 只看该作者
全局:
谢谢楼主的分享 很有用
回复

使用道具 举报

🔗
唷调律师 2020-11-22 12:36:55 | 只看该作者
全局:
楼主面的是苏州的么?不知道国内会比美国这边面试要求高么?
回复

使用道具 举报

🔗
 楼主| lijianzhi01 2020-11-22 14:31:50 | 只看该作者
全局:
唷调律师 发表于 2020-11-22 12:36
楼主面的是苏州的么?不知道国内会比美国这边面试要求高么?

我面的是base苏州,最近扩招,机会挺多。跟美国相比不是很清楚哈,不过看地里的帖子,感觉不相上下。
回复

使用道具 举报

🔗
fansian 2020-11-24 08:58:17 | 只看该作者
全局:
楼主用什么方法管理自己做过的题目?
回复

使用道具 举报

🔗
 楼主| lijianzhi01 2020-11-24 11:10:43 | 只看该作者
全局:
fansian 发表于 2020-11-24 08:58
楼主用什么方法管理自己做过的题目?

我喜欢用Excel登记题型,剩下就是LeetCode网站上了
回复

使用道具 举报

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

本版积分规则

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