leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习
想要学习算法、应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗?
这里我说下我的个人看法,我认为不稳。下面说说为啥不稳以及算法题应该如何刷、如何学才比较好,当然,也会推荐自己学过的资料。
一、先说说笔试题
在刷 leetcode 的时候,你会发现,每道题的题意都很短,你只需要花十几秒的时间,就知道这道题是要你干嘛了,并且每道题所用道的算法思想都很明确,动态规划、递归、二分查找等,你可能很快就知道该用哪种方法,只是你不懂如何把代码写出来而已。
而在笔试中是完全不一样的,在笔试中,大部分题目都是情景题,可能读懂个题目都需要花不少时间,偶尔还会遇到不大知道题目要我们干嘛,而且有时间限制,估计每道题给你分配的时间是 30 分钟。这里我随便扔一道题给大家看看(Shopee去年的真题)
并且你可能不容易看出来,这些道题该用什么方法好,有可能是多种方法的结合(当然,不是指这道题哈)。
也就是说,在 leetcode 中,hard 级别的题做的出来,而在笔试中 medium 级别的,由于时间、心态等因素的影响。你可能还做不出来,当然,大佬除外。下面说一说题型的一些题型以及如何学习算法会好应付点。
在笔试中,我认为主要有如下几种题型:
1、基本数据结构的考察:这类题我觉得是比较简单的,主要考场基本数据结构的操作,例如二叉树的层序遍历,链表的逆序等,当然,它不会直接告诉你,让你来逆序或者遍历。例如
2、某种算法思想的掌握:这类题你掌握了某种算法思想,就会比较容易,如果不懂,那就凉凉了。例如动态规划、回溯、枚举、深度/广度、贪心、二分等。其中,我觉得动态规划考的挺多,还要就是 回溯+深度/广度。例如
所以,常见算法思想,一定要掌握。
3、边界条件的考察:这类型的题,估计你一看就有思路,知道该怎么做,但是,它的边界条件特别多,需要分很多种情况来讨论,特别容易出错,有时候会让人陷进去,越做越复杂,这类题主要考场你的思维严谨程度。例如
4、找规律、数学公式:这类型的题,主要是根据数据之间的一些关系,来找一些规律,进而推出他们的通用公式,就像我们高中时,找数列的同项一样。例如
二、应该如何刷题?如何学习?
上面说了笔试题的一些情况,也说了主要考察的一些题型。针对这些题型,我觉得在刷题的时候,你要做好下面几件事。
1、分类归纳/总结
归纳?总结?估计大部分都知道归纳、总结这么一回事,但是,有没有去实践我就不知道了。
(1)、数组和相关题型
对于算法题,还是有很多种题型需要去总结的,如果你懂这个题型,以后遇到类似的题,相信很快就能做出来的。有哪些题型可以总结呢?答是非常多:例如
(1)、给你一个非负数的数组,求最大子数组和的长度
这算是一个题型,关于这个题型,有很多种变形、拓展,这里建议一起归纳总结,例如
(2)、刚才给的数组是非负数的,现在变一下,给的数组是可正可负。
还能继续拓展吗?答是可以的,例如
(3)、给你个矩阵(即二维数组),求最大子矩阵和的面积
还有吗?有,例如刚才是求最大和,现在我改成求最大乘积。
我举上面这些例子,就是想告诉你,对于前期的学习,我建议分类刷题,总结题型,像我上面举的这些例子,在笔试/面试中还是比较常见的,如果你懂得对应的方法,就可以秒杀了,因为这类题,没啥边界或者规律。例如我刚才距离的Shopee的零食柜那道题,实际上就是数组切割题型,相当于给你一个数组,让你切割 n 下,那么可以把数组切割成 n + 1 个子数组,怎么样切割,才能让最大子数组的和最小?
关于题型的,还是很多的,我这里无法一一给你列举,只能靠你刷题的过程中,进行分类、总结。不过我可以给你推荐一些资料,后面推荐哈。下面我在说一些题型吧。
(2)、基本数据结构操作相关题型
刚才我说了,笔试题的考察,有一类题是基本数据结构的考场,而且,这类题在面试中,也是高频考点,在笔试中,倒不是很高频。对于这类题,我觉得你愿意去总结,那么以后遇到,问题不大。例如
链表的各种操作:逆序(部分逆序、按某种条件逆序)、判断是否有环,环的入口节点、删除指定节点等。
二叉树的各种操作:各种非递归的遍历操作(前中后、层)、二叉树的公共祖先、根据前中后的遍历结果来重构二叉树等等。
队列、栈相关操作:最小栈、来队列来实现栈等。
(3)、字符串相关问题
不得不说,字符串相关问题,估计考的最高频,而且,我可以告诉你,对于字符串相关问题,90% 可以用动态规划来解决。反正对于字符串问题,我一般想法就是能否套用动态规划,字符串问题有点多,不过你有时间,建议总结。例如:通配符的匹配、最长公共子串、最小编辑代价、最长回文串等等。大部分都是用动态规划,而且,我觉得解法都差不多,所以强烈建议专门花一段时间来做、总结、归纳。后面我也会写这方面的算法文章,敬请期待。
2、多思考/动手,提高自己的思维完整性/灵敏性
(1)、边界、找规律题型
刚才我说有一类题型是边界特别多的,对于这类题,我觉得不好总结,这类题考察你逻辑是否严谨,能否化繁为简。这里我建议多做几道,做的时候,多自己思考,千万不要觉得自己知道思路,自己怎么写,只是情况太多,懒的写,直接看别人的答案,这样子,这道题你做了价值不大,因为这类题就是考察你思维完整性的,最好是自己做,可能你用了 十几个 if 语句,没关系。接着你可以把你的 if 语句进行化简,查找他们的共同点。最后你可以看大佬们的做法,你的收获会更大!
对了,也千万别急着动手写,应该想一想可行性,不然你容易陷入无底深渊。
对于找规律的题型也是一样,这类题最后别急着看答案,应该多思考,多做几道,做多了,你的思维会越来越灵敏,以后看到这类型的题,可以很快有思路。
所以,对于这种边界、规律题,个人感觉总结的价值不是特别大,更多的是多思考,多动手。
注意:每道题,我们都要追求最优解哈,别觉得 ac 了就完事了。
三、我看过的一些资料
上面说了那么多,可能有人是道理我都懂,可我还是学不会,说实话,学习的方法有很多,每个人的学习方法也都不一样,我这里也只是提供一种参考。但是,无论什么方法,你不去动手执行,那么,一切都是空话。
这里我推荐一些我看过的书,感觉挺不错。
文中涉及到的书籍以及视频,在我的微信公众号:苦逼的码农,回复『算法学习』即可获取
1、书籍推荐
刚才我说了很多种题型,对于按题型刷题总结,首推《程序员代码面试指南:IT名企算法与数据结构题目最优解》,这本书真的挺不错,大部分题型都总结了,而且每个专题有十几二十道,这里建议大家买本来学习。
还要一本我大一看的,感觉也挺不错,叫做《挑战程序设计大赛》,不过这本比较适合不急着面试的吧,这本不像上面那一本,专门来总结各种题型应付面试。
《编程之美》、《编程珠玑》也建议看,这两本我觉得比较有趣,不是说让你一直刷题一直刷题,这两本你可以买来看看,会给你带来一些思路,这两本我是只看,没动手打代码。
Leetcode 刷题的时候,也是可以分题型刷滴,所以也可以去 leetcode 刷题,不过刷题的时候,我这里有个建议,就是别在本地 IDE 写代码,直接在网页端写就行了。因为面试的时候,一般就让你在记事本写代码,不会给你 IDE。如果你不习惯,估计很容易写错代码,而且,有些库函数你也把名字忘记了。网页端其实也是挺方便的,也会有一些代码提示。
对于,对于连各种算法思想、数据结构都还不懂的同学,上面的数据不大合适哈,推荐我看过的两本书《数据结构与算法分析 — C 语言描述版》、《算法设计与分析基础》(这本代码实现是用伪代码的)。
2、视频推荐
说时候,我视频看的不多,对于算法的学习,特别是刷题,我是不大习惯看视频,如果你想看视频,我觉得牛客网的算法视频还不错吧,我没过几集,分初级班和进阶班。其他的我也没看过,所以这里可以推荐的不多。
四、总结
回到标题,leetcode 刷 500 道题稳吗?说实话,你能坚持刷 500 道题,说明你的能力还是挺强的,但是对于笔试,我觉得不一定稳,得看你怎么做,例如是否追求最优解,是否进行总结归纳,还是说你只是暴力 ac 了之后就不理了,或者不敢跳出舒适区,老是做那些比本来就比较擅长的题目,而遇到自己弱的题目,马上就看答案了。而且我说了,有些题是找规律或者边界很多的,这类题需要你多思考、动手,不是说我多刷几道就可以了。
总之,对于刷题,千万别追求数量!
上面的做题方法,不一定适合每一个人,只是我自己的学习以及建议,供大家参考。想要获取上面那些资料的,可以在我的公众号 苦逼的码农 回复『算法学习』即可获取。
今天是国庆最后一天,大家也玩够了,所以接下来,就要好好学习了,先把自己的硬实力提升起来。在后面,我也会多写一些算法题,例如动态规划,回溯,递归等。
看完有收获?那么希望老铁别吝啬你的三连击哦
1、点赞,可以让更多的人看到这篇文章
2、关注我的原创微信公众号『苦逼的码农』,第一时间阅读我的文章。公众号后台回复『电子书』,还送你一份电子书大礼包哦。
3、也欢迎关注我的博客哦。

作者简洁
作者:帅地,一位热爱、认真写作的小伙,目前维护原创公众号:『苦逼的码农』,以写了150多篇文章,专注于写 算法、计算机基础知识等提升你内功的文章,期待你的关注。
转载说明:务必注明来源(注明:来源于公众号:苦逼的码农, 作者:帅地)
leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习的更多相关文章
- C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...
- 互联网技术笔试总通不过?leetcode刷对了么
https://36kr.com/p/5084645 Leetcode,绕都绕不过去的程序员刷题神器 编者按:本文来自逆行求职(ID:nixingjihua). 对所有求职技术岗位的童鞋来说,有这么一 ...
- LeetCode刷题 --杂篇 --数组,链表,栈,队列
武汉加油,中国加油.希望疫情早日结束. 由于疫情,二狗寒假在家不能到处乱逛,索性就在家里系统的刷一下算法的内容,一段时间下来倒也有些小小的收获.只是一来家中的小破笔记本写起博客来实在不是很顺手,二来家 ...
- LeetCode刷题的一点个人建议和心得
目录 1. 为什么我们要刷LeetCode? 2. LeetCode的现状和问题 3. 本文的初衷 4. LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- leetcode刷题--两数之和(简单)
一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...
- java笔试面试(转载)
Java面试笔试题大汇总(最全+详细答案) 2016-02-01 15:23 13480人阅读 评论(8) 收藏 举报 分类: Java面试题(1) 声明:有人说, 有些面试题很变态,个人认为其实 ...
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- 笔试算法稳了,GitHub 50k Star《labuladong的算法小抄》
秋招算法有救了!!! 前不久在 GitHub 出现了一个手把手带你刷 LeetCode 的项目:fucking-algorithm. 该项目此前在 GitHub 开源后,连续多次霸榜 GitHub T ...
随机推荐
- Spark比MR快是因为在内存中计算?错!
MapReduce 就像一台又慢又稳的老爷车,虽然距离 MapReduce 面市到现在已经过去了十几年的时间,但它始终没有被淘汰,任由大数据技术日新月异.蓬蓬勃勃.花里胡哨地发展,这个生态圈始终有它的 ...
- C++ 生成随机数 srand()和rand()
1. rand() rand(产生随机数)表头文件: #include<stdlib.h>定义函数 :int rand(void) 函数说明 :因为rand() 的内部实现是用线性同余法做 ...
- Redis 5.0 redis-cli --cluster help说明
背景: Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境.直接使 ...
- Centos 6下使用cmake编译安装MariaDB
写在前面 最近在学习Maria DB,为了方便查阅,又为了将所学的知识重新的梳理,特作此随笔一篇,希望过后阅读时能有所感,也希望对大家能够有所帮助. 安装前的准备 大家都知道,在Linux上安装软件一 ...
- JS/JQuery 禁用超链接a
JS // 禁用超链接元素elem ; document.getElementById(elemID).setAttribute('disabled', 'disabled'); // 启用超链接元素 ...
- 经典案例复盘——运维专家讲述如何实现K8S落地(摘抄)
以下是运满满K8s容器化进程记录,摘抄一下,方便以后查阅. 背景介绍 运满满自开始微服务改造以来,线上线下已有数千个微服务的 Java 实例在运行中.这些 Java 实例部署在数百台云服务器或虚机上, ...
- mybatis执行过程及经典面试题
Mybatis执行流程 mybatis中xml解析是通过SqlSessionFactoryBuilder.build()方法. 初始化mybatis(解析xml文件构建成Configuration对象 ...
- 你应该知道的简单易用的CSS技巧
作为前端,在工作中难免会遇到关于排版的问题,以下是我整理的一些关于CSS的技巧,希望对你能有帮助. 1.每个单词的首字母大写 一般我们会用JS实现,其实CSS就可以实现. JS代码: var str ...
- Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现
Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...
- 记录一次jvm内存泄露的问题
前些天,运维告诉我刚上线的java服务占用CPU过高. 以下是发现解决问题的具体流程. 1:通过#top命令查看,我的java服务确实把CPU几乎占满了,如图 可看到18400这个进程CPU占用达到了 ...