欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

大家都是如何刷 LeetCode 的?

程序员文章站 2022-04-10 09:51:32
说一个工科转CS同学的例子,毕业后刷题3个月拿到Facebook,Google,Amazon全职offer。这是他在3个月刷题过程中做的笔记,将近900页,你们感受下https://mnmunknown.gitbooks.io/algorithm-notes/content/大家刷LC的目的一般很明确,就是为了找工作应付算法面试。由于选拔性质的存在,面试中的算法题从问题的深度和广度上都会有其限制:不能太难,也不能太偏。所以算法面试往往并不完全是看谁最聪明,而是看谁准备最充分。这是一个可以靠针对性训...

说一个工科转CS同学的例子,毕业后刷题3个月拿到Facebook,Google,Amazon全职offer。

这是他在3个月刷题过程中做的笔记,将近900页,你们感受下

https://mnmunknown.gitbooks.io/algorithm-notes/content/

大家刷LC的目的一般很明确,就是为了找工作应付算法面试。

由于选拔性质的存在,面试中的算法题从问题的深度和广度上都会有其限制:不能太难,也不能太偏。

所以算法面试往往并不完全是看谁最聪明,而是看谁准备最充分。这是一个可以靠针对性训练与总结“hack”的机制。

回到刷题本身,不要寄太大希望于“速成”。一般要制定一个至少几个月的学习计划,根据自己当前的基础和水平做针对性训练。

算法题数量太多怎么办?

前面说的同学在刷题的时候,LC大概只有400-500道题,不到现在的1/3。想要全部刷完LC上的题目其实不太现实也没必要。

我见过刷题不到100道就能进谷歌的人,也见过刷了500题依旧过不了面试的人。所以不要把“题目数量”作为刷题指标。而应该把问题拆解,拆成具体的问题模式和对应的解决方法。大概像是这样:

大家都是如何刷 LeetCode 的?

每道算法题都有其构成的基本单位,比如属于数组、用到了某某算法等。通过将问题拆分,做类比分析思考,自行做“聚类操作”,我们就能构建自己的算法知识体系。这个过程做笔记是最有效的。

比如很多问题都可以转化成“Tree”或者“Graph”,或者“递归”

搜索问题基本是多叉树,有些问题就是以root为起点的“走迷宫”——DFS + Backtracking

有些在搜索/子问题树里,要按特定顺序进行处理——在二叉树里,我们叫它pre-order / in-order / post-order遍历

有些时候,树的结构与子问题重复性很高——于是有了记忆化搜索 / 动态规划

知其所以然,寻找知识的根节点

一个问题求解的思考过程,要比最终解法更重要。就好比数学/物理定理,你理解了会用是一种境界,能完整证明又是另一种境界。所以如果可能的话,尽量不要让自己陷入靠记忆解决问题的地步。

就拿动态规划来说,我们刚做动态规划题的时候往往都摸不着头脑,看了答案之后恍然大悟,原来是这样,只要找到状态转移方程,之后就简单了。

但这里的坑点也在这里,因为答案一般直接告诉你了状态转移方程,却不会说明是如何找到状态转移方程的。这个思考过程在刷题中其实是欠缺的,这也导致看起来懂了,其实并没懂,下次遇到动规题还是很大可能不会。

如何提高刷题熟练度和速度?

  • 直接在Online Judge上写,尽量靠眼睛debug,少用IDE;
  • 常用算法/模板结构集中多练习(quick select,BFS/DFS);
  • 多和朋友讨论,多做模拟面试;
  • 面试前花1-2周时间好好练习白板代码

最后提供一些我觉得不错的算法入门书籍和工具

  • Algorithms(红皮书,Princeton):适合入门,配合公开课一起看
  • 算法导论:不建议入门时看,适合作参考书,带着问题来看
  • VisuAlgo:算法可视化工具
  • LintCode等Online Judge算法题训练平台

另外,九章算法班新一期首节直播分享也已经结束了,戳我即可报名免费观看录播,有关国内外大厂算法面试的各种问题,包括如何高效刷题、如何跟面试官正确沟通、如何提升代码质量和bug free能力等,都会分享~

本周六还有系统设计免费讲座噢~

2小时带你设计高频系统设计面试题——秒杀系统,全面解析高并发常见问题。
戳我免费报名

内容介绍:

通过秒杀系统和订票系统了解如下内容:

  • 高并发场景下引发的常见问题
  • 了解数据一致性
  • 什么是动静分离
  • 读写分离如何实现
  • 如何防止超卖

讲师介绍

南帝——阿里在职P7+,14年+软件开发经验,10年+架构设计经验,擅长系统整体架构方案设计,面试过超过100+候选人,拥有多年资深面试官经验。

讲座时间: 2020/7/18 本周六 上午9:30:00

课程时长: 120分钟

本文地址:https://blog.csdn.net/JiuZhang_ninechapter/article/details/107388730

相关标签: leetcode