天天财汇 购物 网址 万年历 小说 | 三峰软件 小游戏 视频
TxT小说阅读器
↓小说语音阅读,小说下载↓
一键清除系统垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放,产品展示↓
首页 淘股吧 股票涨跌实时统计 涨停板选股 股票入门 股票书籍 股票问答 分时图选股 跌停板选股 K线图选股 成交量选股 [平安银行]
股市论谈 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事
商业财经 科技知识 汽车百科 工程技术 自然科学 家居生活 设计艺术 财经视频 游戏--
  天天财汇 -> 科技知识 -> 为什么大家都贬低 LeetCode 的难度? -> 正文阅读

[科技知识]为什么大家都贬低 LeetCode 的难度?

[收藏本文] 【下载本文】
leetcode hard 的最终代码往往不超过 20 行、但是几乎每一道都是一种新的套路、我认为能做出来已经几乎处于人类脑力的小巅峰了。我个人认为 …
ICPC Finalist:题主先生,您好您好您好,有什么事我们能帮到你
题主:(趴桌,喘气)呼,我要说的事,你们千万别害怕。
ICPC Finalist:我们是金牌选手,我们不会怕。您请说。
题主:我刚才,在Leetcode周赛爆零。
(ICPC Finalist、NOI Au 肃然起敬、战术后仰)
ICPC Finalist:Leetcode 是哪一位。
题主:不是哪一位,就是那个很多很多算法难题的 Leetcode 。
NOI Au 画出 NOIP。
题主:不是中学生打的,是大学生打的。
NOI Au 画出 ICPC。
题主:不它在网络上打的,不是现场赛。
NOI Au 画出 Codeforces。
题主:题呢?没英文的它是中文的。
NOI Au 画出 Topcoder。
题主:这?
ICPC Finalist 夺过纸,画出南昌邀请赛的模样:中文的。
题主一手把纸扇飞:Leetcode啊!算法有没有学?就是那个很多难题,做200道就能进谷歌的Leetcode,明白吗?
ICPC Finalist:明白了,您继续说。
题主:它疯狂地出题虐我,说我很菜,试问谁不知道,然后让我自闭,就上周六那场,全部都是难题,还有线段树,线段树!数据范围那么大,直接让我做,我拿起键盘,直接打了个暴力 ,kua 就 T 了,我就像人...
NOI Au 扑哧。
题主:你笑什么。
NOI Au:我想起高兴的事情。
题主:什么高兴的事情。
NOI Au:我的广义后缀自动机Parent树上动态点分治AC了。
ICPC Finalist 扑哧。
题主:你又笑什么。
ICPC Finalist :额,我的AC自动机上高斯消元解概率DP方程也AC了。
题主:你们俩过的,是同一个题?
NOI Au:对对对。
ICPC Finalist 艰难地憋住笑:啊,不是,是都用了数据结构。
题主:我再重申一遍,我没在开玩笑。
NOI Au:对,对。
NOI Au、ICPC Finalist 没忍住笑出了声。
题主:歪~~~~~(疯狂敲桌)
ICPC Finalist:我们言归正传,您刚刚说的这个 Leetcode周赛,它难么?
题主:它不是难不难的问题,它真的是那种,很少见的那种,它的题目很巧妙,动态规划,二分答案,很有意思,让人百思不得其解,遗憾的是那天题太多,没能看完。
NOI Au 憋笑。
题主:你欺人太甚我忍你很久了!
NOI Au:我的题 AC 了。
题主:你明明在笑我你都没停过!
NOI Au:题主先生我们受过很严格的训练,无论多好笑呢,我们都不会笑,除非忍不住(转头看向ICPC Finalist
ICPC Finalist:不如这样题主先生,您先回去等消息,我们一有进展立马通知您。
题主:行你们赶紧去做,很难的多带点人。
(机房狂笑
NOI Au:题主先生您还有什么要补充吗
(机房狂笑
ICPC Finalist:题主先生?
对我来说 LeetCode 难但面试容易。
我是约 20 年前 NOIP 省一保送的,但是上大学后没有参加 ACM。LeetCode 的 medium 基本上都能做,但 hard 就看缘分了,开题后会做就会做,不会做的 20 分钟后可能还是想不出来比暴力更优的解法。(对于美国的面试来说,刷 hard 的性价比太低,所以我也不去刷。)
我今年面了约 10 家公司,拿了 7 个 offer,级别分布在 senior 到 staff,面试前没有特别做什么准备,感觉挺容易的。都是远程面试,到时间了就开视频,对方问什么我就聊什么。
算法题没遇到过 hard 的,而且 recruiter 都会强调「我们更看重你在解题过程中和面试官的沟通合作」,所以我把解题过程当作现实中的合作过程来对待,而不是开题后埋头自己做。
我遇到过一道问题,一开始只要求合法解,然后问我能不能优化一下。我就问他想要怎样的优化,是想要解的数组的元素个数最少还是元素总和最小。他问我怎样对用户最理想,我就说没有用户调研我也不知道,但我会倾向于元素总和最小。他让我写个元素总和最小的,我告诉他这等效于一个背包问题,你真的想让我花时间写一个背包问题吗?他说不需要最优解,比先进先出获得的合法解更优就好了。我写好之后他一开始还有个地方没看懂,我们就针对那一行代码讨论了一下,然后他觉得我是对的。
对于 senior+ 来说,定级主要看系统设计和过去做过的事情 scope 有多大,所以算法题能做好 medium 就差不多了,没必要过度优化。(管理职位的面试甚至能容忍代码写得有点生疏,只要数据结构和算法等基础知识能说清楚就行。)
我不明白为什么有那么多人觉得 LeetCode 容易。这个世界上是有少数人特别热衷于算法题,把打比赛看作娱乐项目,这些人觉得 LeetCode 容易是合理的。我不是这样的人,我的娱乐项目是打 Overwatch 而不是打比赛,而且我相信大部分人都跟我一样不会无聊就去打比赛,所以有太多人觉得 LeetCode 容易在我看来是不合理的。
我的 hard 做不出来时就真的做不出来,我的 medium 也经常第一次提交通不过,所以通过/提交比例是 50% 左右。我会说 LeetCode 不容易但我不会花时间去过度优化因为性价比不高。对于大部分人来说,LeetCode 不需要训练到觉得容易的程度,大部分中国人更应该花时间在训练沟通能力上。
这不是对着机器做题就可以的,需要进行模拟面试。觉得找大厂面试官做模拟面试太贵的话,可以多找一起刷题的同伴互相练(互相不收钱)。我以前做 AlgoTogether 时有组织学生互相练,现在如果有足够多的人感兴趣的话我也可以组织一下。
因为你乎人均NOI/ACM区域赛金牌
leetcode不难,
难的是,给你一支水笔,一面白板,一个操着尤带口音又吐字飞快的英语的人在你背后盯着你让你半小时左右一口气写完
当年我养成代码模块化多写辅助函数的好习惯就是因为白板太短了,一个for循环如果长到换了行分分钟看花眼,所以动笔之前基本就要想好哪块地方能写多少行代码
我记得最离谱的一次面试是在纽约彭博社办公室,我在一间全透明的玻璃会议室内,一共三个面试官(两个主面一个影子),他们让我直接用黑水笔在办公室的玻璃幕墙上答题,而玻璃墙面前则是整个办公区和公共区的交界口,无数员工人来人往去喝水上厕所,更有甚者饶有兴趣的停下脚步,试图看两眼我写的是什么玩意
这种情况下,leetcode还真tm挺难的
LeetCode大都是业务级别的问题
随便去个 OI/ACM 刷题网站(譬如洛谷、Codeforces)后面都是数学级别的问题
兄弟会背叛你,女人会离开你,金钱会诱惑你,生活会刁难你,只有数学不会,不会就是不会,怎么学都不会。
你之所以这么问,是被那些人打击到了,你费了很大劲去学习还觉得难但是他们说简单,有点被学霸鄙视的感觉。
leetcode的题目确实比ACM的要简单,而且通过不了的问题都会把test case的数据给你看,节省的时间不止一点点。你去找个acm的网站做做看,有些题目几天都提交不过,但是死活都都不会把通过不了的输入数据告诉你,真的会气吐血。在那些做过ACM的人眼里,leetcode就是简单,这样说完全没错。
你的问题是你觉得不应该有那么多人说leetcode简单,这个也不好统计,或许牛人真的有那么多吧。但是就算所有的人都在说leetcode很难,自己该努力还是得努力。
leetcode的难是难在当着面试官来做,时间本来就有限,有时候还要求在纸上写,和平时练习的时候心态都完全不同。自己一个人练习的时候能写出来,不代表面试的时候能写出来。我面试别人的时候曾经碰到有的人赶过来晕车了,错过饭点空腹面试更是常见。在这些情况下就算leetcode的简单题也没那么简单了。
从求职的角度来说,只要达到(面试的时候)把leetcode做好的能力,就有机会拿个好offer。等你拿到了sp/ssp,有多少人说简单又有什么关系呢?
我现在工作这么多年了每年还是会抽一段时间去做几道leetcode,别人说简单还是难不会影响我,我自己觉得有用,我相信自己的判断。
LeetCode有点像小学奥数,竞赛题有点像高中的解析几何,两者思路不一样。
一道LeetCode的面试题,几乎能准确划到某个类别里。当你刷了一百来道题的时候,可能会有一种感觉,看到题就大概知道考点。这就是传说中的量变引起质变。
竞赛题也可用限时卡复杂度来间接卡你的算法,但花样千变万化,不像LeetCode那样,连我这样的竞赛参与奖得主都能看出点套路。
所以我觉得LeetCode没有那么难。第一次刷题的时候我也很懵,easy都写不顺溜,但刷了几星期以后慢慢就能找到手感了。
各位很多人接受过高考那样高强度的训练,那个五花八门千奇百怪的都坚持下来了,LeetCode真的不怕的。只要习惯了CS算法题的这种形式,加上一点点题海战术,很快能提高的。
这是之前回答中提到的刷题策略:
个人推荐先刷前一百五十道,最经典。然后在the top liked questions挑题目刷。从Easy难度开始刷,40% Easy,50% Medium,10% Hard。这样刷下来,一般大概有感觉自己什么题不熟了,再按考点tag重点刷。
技术面试的两个步骤,一个是想到解法,一个是把思路转换成代码。刷题准备时观察一下自己哪一步有困难,对症下药。
思路有问题,想不到算法怎么办:按照tag多刷刷,总结什么样的题型可以应用什么样的解法。比如sliding window还有动态规划,先做基本题型再来两道变种题型巩固。自觉算法不扎实的话先去看书Cracking the Coding Interview。写代码速度很慢,经常写bug怎么办:比较容易解决,只要多练就行了。整理一下你选择的语言,常见的数据结构的接口是什么,基本的算法像dfs和bfs一般怎么写,实在不行先做成cheatsheet强行背下来。还有边界条件怎么检查,刷多了就知道容易踩的坑。
利益相关:大厂面试官,给Code Jam审过题(逃
其它回答:
你写过什么有趣的程序?1772 赞同 · 123 评论回答


程序员简历应该怎么写?43 赞同 · 5 评论回答


如何得到 Google 的工作机会?571 赞同 · 92 评论回答


我司算是互联网企业中比较大的一个了,面试难度应该是中等偏上的。
如果不谈算法工程师这种算法强的,也不谈测试运维这种算法要求低的,只谈普通服务端开发的话:
一般招聘应届生,只要能做出一个 leetcode hard,一个 medium,大概率都会给 offer 的。当然不会问原题,一般都会稍微变一下。
一般社招,在可以换题的前提下,只要能轻松做出 medium 的问题,或者经提示做出 hard 的问题,算法就算过关了。
所以,如果你觉得 leetcode 很简单的话,那么你面试大部分互联网企业,起码算法这块应该没啥问题。
但是,事实上,来我司面试这块因为算法挂掉的很多很多,比算法过的人数多得不成比例。
所以,对于普遍的工程师来说,leetcode 并不简单。
有人觉得简单,可能是实力太强,也有可能是听算法好的工程师说的。
实际上简单不简单,还得自己来刷。
作为一个刚学过编程没多久的人来说,我第一次刷leetcode的体会就是“一脸懵逼”。记得第一次刷的时候,搜了下如何刷leetcode,大多数建议就是说按专题一个一个刷,于是乎就随便找了个专题去做,记得好像是二叉树吧?后面就去百度了下“二叉树”,看了个大概十分钟,沃就知道,哦,原来这就是二叉树,定义是什么,存储方式有哪些,遍历顺序有哪些。心想,这tm也太简单了吧???(问号脸)于是乎自信满满的点开了leetcode,第一道题盯着屏幕想了10分钟,觉得不太可能,再想想,过了60分钟,觉得哇靠,怎么标简单的题都不会吗?不可能吧又想了想,过了3h。。。后面说可能是精神不好,去吃个饭然后去公园散步完回来洗个澡再重新打开这题,发现wtm怎么这么垃圾,临睡前无奈还是看了答案。不看还好,一看wc,这题解答案怎么这么短,可是我怎么连这个都看不懂。。。我lj到这个地步。。。后面第二天,我又打开一道新的题解,经历了跟昨天一样的过程。然后就到第三天,还是一样,心想着事不过三,一定是我方法不对,于是乎又搜了下知乎,发现一个个说的贼tm容易,教你这样教你那样,还有一些说什么20天零基础刷完几遍拿到大厂offer。。。这一天我自闭了。第五天,我想通了,放松心态,点开第四道题,过了半天,依然不会。第五天,不会。第六天,不会。第七天,不会。好了,到此为止,我觉得我真的远远达不到知乎人均水平。第八天起,我打开一道题,直接看题解,打开第二题,直接看题解,打开第三题,直接看题解。一连看完10道题解,总结了一番,才发现原来二叉树的类型是这么个写法。。。之前一直停留在观望着知乎人均水平的角度上去怀疑人生→_→。以后一段时间有别的事要忙就搁置了,然后后面想到就又点开了二叉树,这次一看那些题目,刷刷刷就敲出来了,来来去去好像就这些的感觉。总的来说不知道可能是自己太笨了还是,我是完全没法一开始就知道要怎么写,反正就是要做过一遍,找到那个感觉写起来就跟溜。但是每次一上知乎我就会严重怀疑自己是不是脑残的,一堆都是零基础xx天干嘛干嘛的???只希望自己有朝一日能达到知乎的“人均”水平就心满意足了。
工作前我也有个疑惑,就是刷力扣的人都是怎么刷的,我水平不高,acm做个签到题,极限情况下再做一道题不能更多了。做力扣的时候大致水平是m一天做两道三题,hard一两天一题差不多,按这个速度刷两千道力扣刷三五遍那怕不是要从小学开始刷时间才够
但我工作了两年后我突然悟了,力扣的存在不是为了让你自己一题一题做出来的,这不是数学练习题,刷力扣题应该是拿着答案抄一遍,厉害的人可能抄的时候理解一遍,有些人可能就是背一遍答案,然后两遍三遍这样。。
话说回来我现在觉得这样刷倒也完全没问题,面试如果问真题你抄过三遍答案怎么你也能说点东西,而且算法这东西你如果真的没学过要想出来那也难度太大/太花时间了。但如果你抄了好多题后拿到一道题知道大致用啥算法做那正确率也就上去了,这个时候才来到把算法正确实现的基本功上
当然面试这东西还是看面试官水平,大厂通常更看重你的思路,那其实也是在要求你的沟通能力要达标。我自己就是那种拿到题后喜欢先埋头做一下的类型,面试了好多次后才把这个习惯改掉,以至于后来想想第一次面试面谷歌真是暴殄天物,如果最后面谷歌说不定也能进去打个小工~
所以说回来说力扣,如果你就是照着答案抄一遍力扣(真刷好多遍的人应该也不会去贬低力扣吧),可能还真会看不起力扣,毕竟抄答案那难度确实是直线下降,何况就像其他答主说的,力扣上纯数学题也不多,大部分是工程题,对时间空间复杂度卡得也没有某些OJ平台高
有省一(准确来说是 6 级)以上水平的 OIer/ACMer,对于他们来说 leetcode hard 难度的题大多来说也是比较常规套路的题目,那么他们觉得 leetcode 简单很正常。因为哪怕是在联赛中区分省一和省二的题目,其代码量和思维量也通常比 hard 题持平甚至更高。听第一类人说 leetcode 简单,然后就真的跟风认为 leetcode 简单的人,然后还各种吹逼。
第二类人比第一类人多得多。
TL;DR
LeetCode整体难度水平,和题目风格,是由各大公司实际面试需要导致的。
时间紧,+人够用就行,这就导致整体不会太难,也就没法和面向竞赛的OJ比难度了。
-----------
首先,LeetCode的“初心”是,收集IT企业研发岗的常见算法面试题,而不是筛选xx科学家
而企业,只要够用就行。
IT开发的够用,怎么样算够用呢?
有一定的基础知识 (编程语言,数据结构,操作系统,计算机网络) 有理解业务需求,然后转化成代码的能力 人要够灵光,在面对有些麻烦的事情的时候,能漂亮地应对
那么,算法面试题的集合体LeetCode,也会体现这样的特性:
- 大部分题目会描述一个场景。
这个其实OI/xCPC也是一样的,所以,不细说了。
- 只考察需要的知识。
观察标签分类,线性结构、树形结构以及相关操作、哈希表,这些成了非常基础、常见的题型,而这些题型,基本都在你的数据结构课本上有。(数论什么的,不存在的;你在下面见到了中国剩余定理、网络流、FFT(快速傅里叶变换)、后缀数据结构,blablabla的吗?)


相比之下,Codeforces就有更大的考察范围了,甚至这只是冰山一角(买本《挑战程序设计竞赛》《算法竞赛入门经典训练指南》,甚至搞份网上流传的大佬的模板,知识点只会更多):




- 题目需要进行一定深度的思考和分析,然后找到正确的处理方式
但是,这里和竞赛不一样了:
OI竞赛,3~5小时3个题,xCPC,10+题5小时,一般大部分队伍6~7题,头部队伍8~10题
而大公司的一场标准技术面试,只有45~60分钟,一般还会准备2个问题。
这就导致,除非头部公司,就是想筛选最顶尖的人才,会对问题设计得比较困难,一个题留下2~3个要搞定的思考点以外,一般一个题也就1~2个需要想通的点。
- 正解的代码较为简短
除了上面提到的时间因素外,还因为技术面试,一般是在白纸/白板上写下代码,而不是敲键盘的。(线上面试,和个别有条件的公司除外)
为了节省双方时间,代码一般都不会很长,正解20行左右就应该能写出来了。
(竞赛的时候就无所谓了 :) )
那么,题主感觉难,有可能是哪些情况?
1、不熟悉OI/ICPC/IT面试题中的常见处理套路:
双指针、尺取法、前缀性质,这些在面试题中常见用于整出线性复杂度的东西,还有递推/动态规划,课本不教,面试喜欢,竞赛里的基础中的基础……
2、“最好”的解的实现实在是过于麻烦
非常经典的例子就是4. 寻找两个有序数组的中位数 了……
3、 “最好”的解剑走偏锋/就是需要灵光一现
……没办法,见一次,能记就记,常见套路内有个思路能得到一样的时间空间复杂度的,那就记常见套路吧,记住全部奇奇怪怪的解答的确太恶心了……
个人吐槽:
我很久没开LeetCode了,因为LeetCode太“臭名昭著”了,以至于最近出现的题,再难,都有一大堆人看过了,拿来当面试题也没什么意思。(我甚至偏好去Codeforces Educational Round温习一下……)
然后见到了那个,当年我的manager拿来当面试题的东西:587. 安装栅栏
这个题其实比较反“面试出题套路”的(几何题作为面试题,非常非常非常罕见),也反出大问题了:ICPC选手秒杀……
因为这虽然不是什么正常的本科生的教材上有的东西,但是,这是ICPC基础几何知识。
偏偏这位manager在面试季前,表达过不喜欢ICPC选手的意思……
不是一个级别的难度。
LeetCode更像是小学奥数,知识大家都会,比的是能不能想到,如何巧妙的运用。
比如LeetCode考点:
哈希表,动态规划,图,二叉树,堆栈等等。。
这些知识点大多在低年级算法课上学过,看到解答的第一反应是,啊,我怎么没有想到。
而OI则像是大学数学,智商达标的基础上,还要有足够多的积累。
比如OI知识点:
树套树,树形DP,状态压缩DP,AC自动机,最小费用最大流,快速傅里叶变换。。。
为了过数据集,OI还经常要做各种恶心的剪枝和优化
LeetCode测的是脑子灵不灵光,招进来以后学东西快不快
OI测的是,有没有天赋,有没有钻研的能力,思路够不够猥琐(划掉
至于难度,本身就是小马过河,但LeetCode本身谈不上简单,不然也不会有那么多大公司用来当做评判标准。
我觉得可能是有两种原因:
1、确实厉害
2、装B
第一种:有些贬低力扣的难度的人并不是像你我一样的普通人...
点开他们的主页,你就会发现不是ACM出身,就是高中就开始打竞赛了。
这还怎么玩?
像我这种为了找个工作才去刷力扣的人在刷力扣时的感受跟他们肯定完全不一样啊。。


第二种:装B,。。。这不就是活着的意义吗?如果不是为了装B,那人生将毫无意义,,。,


首先你要知道自己刷力扣的原因是什么?
是没事刷着玩,还是练习数据结构与算法又或者是跟我一样只是为了找工作。
互联网公司笔试面试会考算法题,并且考察趋势愈演愈烈,这也就造成了很多想要找互联网工作的人都必须要先过算法这一关。


在我以前找工作前,我将剑指offer刷完三遍、LeetCode HoT 100 刷完 + 14个LeetCode 常规Tag,共计600余道题。
然后就没再刷了,我的目的是找工作,不是刷穿力扣。。。
我不是为了刷题而去刷题,我是为了找工作而去刷题的,这一点我时刻谨记。
其中对于比较经典的题型都用不同的方法会进行二刷或者三刷,甚至四刷、五刷,从时间&性能上去提升。
就这样前期做足准备后才去找的互联网工作互联网,最后顺利拿下字节跳动SP的研发岗offer,现在在抖音用头发换工资花。


比如LeetCode No.581最短无序连续子数组,和No643.子数组最大平均数,我就使用了不同的方法刷过三次,持续性的进行优化和提炼总结并且做好自己的学习笔记以及收获感悟。
尤其要说一下,做笔记是个好习惯,好记性不如烂笔头是真的。


我会重复刷这些题并不是因为我闲的没事做,而是因为以下三个原因:
1、从学习角度来说,很多难题都是从经典题型衍变而来的,掌握最根本的方法以不变应万变,而不是有一道新题就去刷一道新题,新题是源源不断涌现的,最重要的是掌握核心。
2、从面试角度来说,一些经典题型出现的频率往往更高,比如LeetCode 第84道题接雨水就曾经在华为互联网机试中出现过多次。
同样,在面试手撕算法中,十大排序中的快速排序出现频率也是相当高。
3、从应用角度来说,要想真正搞明白、弄清楚一道算法题的最优解,应该从时间复杂度和空间复杂度上去进行分析和追求极致,借助OJ上的算法性能评测,持之以恒的对经典题在时间和空间上进行改进优化。


比如力扣第581. 最短无序连续子数组 是一道很经典的数组类型题目,前后刷了三次,因为这是一道很经典的题目,very nice。
刷完这道题就可以试试力扣的No674.最长连续递增序列,类型基本差不多。
一刷 执行耗时beat 98.68% 内存耗时beat 85.61%二刷 执行耗时beat 99.21% 内存耗时beat 94.96%三刷 执行耗时beat 99.19% 内存耗时beat 97.12%
剩下的就是循环往复,不断重复整个过程
这才是刷题的最正确姿势,而不是东刷一道西刷一道,东一榔头西一榔头的乱刷题。
前段时间我上班的时候突发奇想,想看看知乎上计算机领域内评分最高的Top 20 经典书籍有哪些?
分别抓,哦不,手动收集了知乎计算机经典图书推荐问题下的高赞回答后得出的好书集锦,选择标准就是每本书都在推荐版上出现过 5 次及其以上!!
最终将抓到进行数据清洗和合并,得到一份计算机领域类的书籍榜单!
说实话让我觉得有些意外,因为Python类和机器学习类书籍确实不少,不过Top 3却是一等一的经典!
就是下面这三本,现在免费分享一下自己以前抓到的豆瓣上计算机领域内评分最高的Top 20 经典书籍
深入理解计算机系统(原书第3版)计算机程序的构造和解释(原书第2版)程序员的自我修养: 链接、装载与库
数据告诉你知乎计算机领域内最经典的Top 20 书籍有哪些,免费下载!87 赞同 · 10 评论文章


今天简单分享一下自己以前求职时刷题的经历吧。
其实以前就分享过自己是如何在最短时间内准备数据结构&算法面试的,已经收获了超过1000+赞 +和 5000+收藏,不过知乎特色不改,收藏:点赞比5:1。
如何在最短的时间内搞定数据结构和算法,应付面试?1277 赞同 · 48 评论回答


既然题主提到以找工作为主,那就简单直接点,直接分享一下我的刷题方法。
其实核心就是一个,那就是不要为了刷题而去刷题,而是抱着一颗学会算法和顺利找到工作的心去刷题。
如果你时间比较紧张,那我建议你:
多看看我上面那个回答,在最短时间内搞定数据结构与算法以应付面试,毕竟找到工作才是最重要的,笔记算法考察趋势越来越严峻了,现在基本没有不考察DP和DFS、贪心这些算法的大厂了;


如果你还在读大学,有充足的时间,那我建议你:
按照不同的难度分别去刷从低到高,先刷easy的题型,再刷medium的题型,最后是hard的题型;按照不同的tag去刷,比如这一周时间内就着重刷数据和字符串,下一周就着重刷链表和查找按照自己的节奏去刷,不要受身边同学的影响和干扰,沉下心来,安安静静的刷自己的题,走自己的路。
就像我一样,非985 非211,普通二本背景,身边也从没有进过BAT这些大厂的例子,我就提前一年准备求职的东西,早早开始了自己的学习之路,在别人还没有意识的情况下就开始自己学自己的。


在同学都还没开始对找工作上心的时候,我就开始自学找工作需要的知识,自己去补全求职技能。
比如操作系统、计算机网络、数据库、数据结构与算法、编程语言等,从看视频开始,逐渐看书做笔记、刷题,最后准备项目、简历、面试等等。


看C++ Primer 5th做的笔记


挑战程序设计竞赛的笔记
最后也顺利拿下字节跳动、华为、百度、农业银行这些offer,有时候走自己的就行了,不用关心别人怎么评价你。等你成功了,那些在你身边一直BB的人自然就消失了。


就按照自己的节奏,走自己的路就行;
刷题也是一样,按照自己的想法和思路,刷自己的题就行。
下面分享一下我以前的刷题顺序,对于力扣常规题主要是按照以下14个tag进行刷的,仅供参考:
1、数组
2、字符串
3、链表
4、数学
5、哈希表
6、二分查找
7、栈
8、双指针
9、贪心算法
10、回溯算法
11、动态规划
12、深度优先搜索(DFS)
13、树
具体题号如下:
碍于篇幅的原因没有把全部的算法题号写完,跟这些题型类似,基本上都有自己的解法笔记,有些题目甚至三刷甚至四刷过。
还有LeetCode HOT -100 以及剑指offer的题没同步过来,我分享在自己的学习笔记网站上了,其中剑指offer刷题笔记链接:
导读?interviewguide.cn/notes/03-hunting_job/03-algorithm/02-sword-offer/01-introduce.html


力扣刷题笔记链接:
使用指南?interviewguide.cn/notes/03-hunting_job/03-algorithm/03-leetcode/01-introduce.html


全部刷题记录以及笔记和个人见解分享已经开源分享在github上了,需要自取:
https://github.com/forthespada/LeetCodeInAction?github.com/forthespada/LeetCodeInAction
数组414、第三大的数581. 最短无序连续子数组 很经典的题目,very nice605. 种花问题 也是很不错的题目628. 三个数的最大乘积643. 子数组最大平均数 I665. 非递减数列 很好的题674. 最长连续递增序列697. 数组的度717. 1比特与2比特字符724. 寻找数组的中心索引747. 至少是其他数字两倍的最大数830. 较大分组的位置840. 矩阵中的幻方849. 到最近的人的最大距离 好题888. 公平的糖果交换914. 卡牌分组 这也是道好题941. 有效的山脉数组989. 数组形式的整数加法 经典,很经典的题目,一步步渐进,直到最优解法1089. 复写零1128. 等价多米诺骨牌对的数量 好题,真的很好的题剑指 Offer 66. 构建乘积数组字符串13.罗马数字转整数67. 二进制求和434. 字符串中的单词数819. 最常见的单词859. 亲密字符串686. 重复叠加字符串匹配680. 验证回文字符串 Ⅱ
前端时间分享了一个自己的寒假学习计划,很多知友觉得很nice!


链表21.合并两个有序链表206.反转链表237.删除链表中的节点哈希表202.快乐数204. 计数质数205. 同构字符串290. 单词规律387. 字符串中的第一个唯一字符594. 最长和谐子序列599. 两个列表的最小索引总和645. 错误的集合720. 词典中最长的单词884. 两句话中的不常见单词970. 强整数 看的答案,豁然开朗1207.独一无二的出现次数3.无重复字符的最长子串215. 数组中的第K个最大元素 经典347. 前 K 个高频元素380. 常数时间插入、删除和获取随机元素451. 根据字符出现频率排序648. 单词替换692. 前K个高频单词718. 最长重复子数组 经典二分查找69. x 的平方根167. 两数之和 II - 输入有序数组278. 第一个错误的版本350. 两个数组的交集 II367. 有效的完全平方数374. 猜数字大小392. 判断子序列441. 排列硬币475. 供暖器,很经典704. 二分查找744. 寻找比目标字母大的最小字母29. 两数相除34. 在排序数组中查找元素的第一个和最后一个位置153. 寻找旋转排序数组中的最小值162. 寻找峰值287. 寻找重复数378. 有序矩阵中第K小的元素436. 寻找右区间,很好的题454. 四数相加 II792. 匹配子序列的单词数栈155.最小栈225.用队列实现栈682.棒球比赛844.比较含退格的字符串1047.删除字符串中的所有相邻重复项71.简化路径394. 字符串解码636. 函数的独占时间739. 每日温度 经典856. 括号的分数921. 使括号有效的最少添加946. 验证栈序列1003. 检查替换后的词是否有效1190. 反转每对括号间的子串1209. 删除字符串中的所有相邻重复项双指针532.数组中的数对925.长按键入56.合并区间75. 颜色分类80. 删除排序数组中的重复项 II 很好的题目424. 替换后的最长重复字符485. 最大连续1的个数(easy)524. 通过删除字母匹配到字典里最长单词986. 区间列表的交集1004. 最大连续1的个数 III1498. 满足条件的子序列数目贪心算法944.删列造序1029.两地调度1046.最后一块石头的重量1049.最后一块石头的重量 II1217.玩筹码1221.分割平衡字符串回溯39.组合总和40. 组合总和 II46. 全排列47. 全排列 II78. 子集90. 子集 II679. 24 点游戏面试题08.08.有重复字符串的排列组合动态规划53.最大子序和70. 爬楼梯121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV 最难的一种了198. 打家劫舍213. 打家劫舍 II303. 区域和检索 - 数组不可变309. 最佳买卖股票时机含冷冻期714. 买卖股票的最佳时机含手续费746. 使用最小花费爬楼梯1025. 除数博弈5.最长回文子串62. 不同路径63. 不同路径 II64. 最小路径和72. 编辑距离 非常经典的DP问题91. 解码方法120. 三角形最小路径和139. 单词拆分140. 单词拆分 II152. 乘积最大子序列 同样经典的问题221. 最大正方形263. 丑数264. 丑数 II300. 最长上升子序列322. 零钱兑换413. 等差数列划分516. 最长回文子序列 依然经典518. 零钱兑换 II583. 两个字符串的删除操作638. 大礼包 未做647. 回文子串712. 两个字符串的最小ASCII删除和877. 石子游戏931. 下降路径最小和 经典DP问题1143. 最长公共子序列 经典1277. 统计全为 1 的正方形子矩阵 很好的题目5454. 统计全 1 子矩形 超级好题深度优先搜寻(DFS)面试题 04.02.最小高度树104.二叉树的最大深度111.二叉树的最小深度树序列化二叉树二叉搜索树的第k大节点94.二叉树的中序遍历144.二叉树的前序遍历145.二叉树的后序遍历230.二叉搜索树中第K小的元素面试题07.重建二叉树面试题33.二叉搜索树的后序遍历序列面试题34.二叉树中和为某一值的路径面试题26.树的子结构面试题32-I.从上到下打印二叉树面试题32-II.从上到下打印二叉树II面试题32-III.从上到下打印二叉树III
最后感谢看到大家啊,记得收藏的时候帮学长 @阿秀 点个赞呀!!不要只收藏不点赞啊, (??????) ? 拒绝白嫖,人人有责!
算了再给大家分享一个宝贝吧,这回应该不会白嫖我了吧
最近发现三位谷歌大神写算法刷题资料,支持Java、C++、Go三种语言,其中对于面试中考察较多的链表、树、动态规划、数组等知识点讲解的都很全!如果你算法能力比较弱,比如互联网大厂面试中手撕算法比较差的话,那要好好看看了。
【知乎】谷歌高级研发工程师出品!支持Java、C++、Go三种语言的Leetcode刷题笔记~?mp.weixin.qq.com/s/mudWKCmpaDyTZzBXEjuhSA?mp.weixin.qq.com/s/mudWKCmpaDyTZzBXEjuhSA?mp.weixin.qq.com/s/mudWKCmpaDyTZzBXEjuhSA
推荐阅读
1、字节跳动、阿里、腾讯三位计算机学长共同维护的计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)&计算机校招历届上岸分享合集(截止到2023届)。
拓跋阿秀:计算机校招历届上岸分享合集(截止到2023届)59 赞同 · 4 评论文章


拓跋阿秀:计算机校招技术岗各方向学习路线合集(C++、Java、Golang、前端等)35 赞同 · 10 评论文章


2、学习编程其实没你想的那么难,完整复盘我系统准备校招&自学的那一年,好好阅读下去,对你肯定有所帮助。
你的编程能力从什么时候开始突飞猛进?3096 赞同 · 306 评论回答


3、对于一些想要转行或者读研的朋友,下面两个回答肯定能帮到你!
计算机学校期间如何发力,才能毕业后冲击30-40w年薪的offer ?1670 赞同 · 135 评论回答


学校生涯还剩两年,学C++(达到可以找工作的标准)时间够用吗?1640 赞同 · 139 评论回答


4、如果你决定不了到底学习C++还是Java,不妨来看看这个回答!还有就是建议多看经典书,而不是什么《七天教你学会Java》、《21天C++从入门到精通》系列,这类型的书完全是浪费时间,让你走歪路!
如果一定要在C++和JAVA中选择,是C++还是Java?882 赞同 · 210 评论文章


有哪些你看了以后大呼过瘾的编程书?911 赞同 · 39 评论回答


5、Linux C/C++ 方向自学的完整路线,很多人不知道学习完 C++ Primer 能做什么项目练手,这个回答不可错过!
拓跋阿秀:Linux C/C++ 方向自学路线,万字长文为小白新手打造 | 已拿字节后端研发offer387 赞同 · 16 评论文章594 赞同 · 47 评论文章


学习完 C++ Primer 能做什么项目练手或者看什么好的开源项目源码?920 赞同 · 37 评论回答


6、如果你准备时间不多,就抓住重点,在最短的时间内搞定必要的数据结构和算法而去面试
如何在最短的时间内搞定数据结构和算法,应付面试?1277 赞同 · 48 评论回答


7、我自己在学习计算机过程中看过的优质网课,这些精品课程你的大学四年绝对够用了。
数据结构,计算机网络,数据库,计算机组成原理,操作系统有哪些好的网课值得推荐?1130 赞同 · 25 评论回答1318 赞同 · 28 评论回答


有些是刷题刷魔怔了,进入到人题一体、人题不分的高端境界了,这种人说LeetCode不难是不奇怪的;
有些是坏或是别有目的,自己上岸了就说水很凉,你等等再下;
有些是天才,看hard跟玩一样;
我认识的211但科班、正牌、认真的CSer,底子非常不错的那种,大概能做到这个水平:Medium题略有提示或是很久以前见过这题就能现场写出来,一般面试一线厂子就没问题。我认为普通人非竞赛大神能做到这点就相当于资质很高的了。
LeetCode难度不算很高,看看答案练练好像都会。但在面试中能过,这是另一个问题、更难的问题。
或者说,面试和竞赛最大的区别在于,竞赛只是安安静静地思考和做题,一般只跟水平挂钩;面试是全方位考察还带有随机性:旁边有人一直在BBB地问,你每写两句还得一边解释,还得自己让面试官听懂,还得检查各种小问题、猜测面试官的想法和理解。
这就不那么简单了。一个有必过把握的面试轮,个人估计大概只有不到五成的精力在做题,剩下五成都在演戏和接收、发送反馈。
所以说,LeetCode题不难做,但哪怕碰到原题,能不能过面试是另外一个问题。其实面试更像真实的工作,运气和交流成分很大,不是光会做题就行。
LeetCode更像是个面试中的谈资,不是为了难度,而是面试中两人围绕LeetCode题交谈模拟工作,避免纯尬聊;
难度不高,所以就衍生出LeetCode暴力做法:管它懂不懂,来回刷,训练条件反射,最适合资质不高、基础不好但有毅力的人。你说公平不公平?对科班出身、底子好的人当然不公平,但问题是当年这么做的人基本全上岸了,最差的也在享受大house大牛排呢,谁愿意回头谈“公平”?
这世界要是真公平,不就全乱套了么?
当然随着LeetCode题目数量暴增,这招就有点问题了,可能更适合只刷经典。
它帝的码农行业为啥这么搞?说到底,合格的码农实在太少,而需求又太恐怖。
国内一个华为,能折腾得好几年天天上热榜,好像多高精尖个玩意;
美国公司开得起华为价格、比华为舒服或是工资差不多的写代码的厂子,50家?30家?反正一线就至少十几家,哪个不比华为强。
每家招个万把码农,这就多少了人了。它帝自己的教育一坨X,弄出来一堆只长着嘴不带脑子的文科生根本没法用,仅有的一点本族兵估计都填到军工和政府去了,所以这些工作只能靠移民和雇佣兵。
移民工作的黄金岁月也就那么20年。后面有些创业去了,有些财富自由退休了,有些海归故乡当人上人去了,还有的改行、投资,总之这劳力缺口就像小时候的弱智数学题:一个池子,一边开进水一边开出水,多久能填满?
唯一卡脖子的,是移民局的限制。要不然光中国人印度人就能把湾区挤成孟买。
实在是缺人。
有时候感觉,人和人之间的差异,真的是太大了。就在这同一个LeetCode话题下,这里说大家都贬低LC难度,但我也看到不少人在怀疑智商,我明显属于后者。只能膜拜前者,因为我也好羡慕那些拿offer拿到手软,从而通过compete拿到大包走上人生巅峰的大牛们。
你们初刷leetcode时会怀疑自己的智商吗?
那些贬低LC的人,肯定是编程底子好,打竞赛也能拿各种牌的吧。他们来刷LC,那自然不在话下,要不然,估计也拿不到金牌吧。牛人终归是牛人,他们打通了竞赛通道,说LC简单也是理所应当的。
但大部分人,包括我,刷LC几百题才觉得勉强有点入门,看到题目才不会那么犯怵。其实大部分时候,哪怕刷了几百题,遇到新题还是一样没思路。去打LC的周赛,估计还是只能做出来前两题,四题都解出来也是很不容易的。你看看前十的那些大牛们,一个题目只需要几分钟,他们说LC简单,那就是无法可说的,人家那都是约等于秒了这些题目。不服不行。
可是大家也别忘了LeetCode的初衷!LC是为了大家为面试做准备的,而不是一个纯粹的算法竞赛网站。
在我看来,LeetCode确实不容易,但更难的其实不仅仅是写出来代码那么简单,更难的地方在于如何在拿到一个题目的时候,三五分钟就需要理解题目并有比较清晰的解题思路,这还是要在和面试官不断沟通的情况下。
之后就需要和面试官边交流边写完整个的代码。过程中确保代码是正确的,而且需要跑测试代码说服面试官。这个过程我觉得很难,平时练习中,这也是大家最容易忽略的。尤其是口语交流还不是很理想的同学,这个地方需要刻意练习才行。你要是不能清晰表达自己的思路,面试官都不会让你动笔写代码。
如何将自己思路清晰地和面试官交流出来,并把代码写对,这才是我们最应该在平时练习中注意到的地方!
能做到这一点的小伙伴,估计拿到offer的概率是不低的。而这,应该是大部分人练习LC的目的,至于别人贬低不贬低,又有什么影响呢?
反正如果你在美国的话,大公司面试基本的题目就类似于leetcode的难度,很多公司甚至题目就来自于LeetCode。
因此,真正想要找工作上岸的同学,你甚至都不需要去在意别人怎么说,你需要的是给自己一个好的刷题计划,按部就班刷4到5百题,不断总结提高。最好是在这个过程中,边刷题边投简历,以面试代练。这样一样,你就知道自己到底是题目做不出来,还是交流不畅。然后找到自己的弱点,不断进步,最终找到工作。
等找到了工作,拿到不错的包裹,你还会去和人争论LeetCode的难度几何么?
不用刷完LeetCode, 也比较难刷完,毕竟没那么多时间和精力,而且需要高效有目标地刷:
LeetCode按照怎样的顺序来刷题比较好?
Go get the job offer,fxxxk the others.
LeetCode能和ACM比???
两个的根本不是同一个用途,怎么具有可比性?
就像你初中学习数学,LeetCode的作用是辅助考试的,是老师的试卷出题库,而ACM就相当于奥赛。
你拿期末试卷和奥赛的难度比?
众所周知,刷LeetCode的作用主要是用于应对校招。
我大学时候很傻,为了校招,看了不下于五本算法书,加上LeetCode,刷了大半年。
总共一两千道题啊……不刷怕考到……忘了刷,刷了忘……毛都快掉没了……
现在,我辗转几个大厂,由当年的应试者变成了出题人,才知道,完全不必这么辛苦。
任何事情都遵循28原则,我们只要把握住那20%,就能拿到80分!
凡事都讲究性价比!
省下来的时间,谈个女朋友,它不香么???!!!
这里把我这些年的出题经验告诉大家,希望大家知道哪些是重点,应该怎么学数据结构和算法。
直接上干货,我花了两天的时间做了一张图,涵盖数据结构和算法书籍中都会讲到的知识点。并给出了常用算法的平均时间复杂度,对于必须要学的内容前面加了星标


这里面涉及到了近二十种数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;超四十种常见算法思想:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易、非常快。
需要高清无水印思维导图源文件的小伙伴,可以点击这里获取:
长文预警,以下内容涵盖了十几年来学习算法的心得,总结出来供大家参与。如果看完这篇文章,还学不好算法,尽管来骂我。收藏是点赞的五倍啊,原创不易,小伙伴们双击屏幕点个赞支持下吧,手动叩谢了。文章写了很久,我相信它一定能帮到你,也希望大家能给我个赞,以示鼓励,谢谢
目录:
数据结构与算法的区别数据结构怎么学怎么学习算法算法太难懂?那是你不知道这些模拟网站一、数据结构与算法的区别
很多同学搞不明白,数据结构与算法有什么区别,甚至有些同学以为数据结构中就包含了算法。
其实,是字面意思就能知道个大概,数据结构主要讲解数据的组织形式,换句话说,我就是我们要怎样把这些数据存储起来,所以有列表、堆、栈、树、图,这是数据结构的重点。
而算法,则注重的是思想,比如列表里的元素怎么排序、怎么在当前的存储结构中找到最大的数和最小的数?等等,说白了就是解决现实中问题的思想。所以才会有分治思想、贪心思想、动态规划这些经典算法。
二、数据结构怎么学
关于数据结构,我想说的是,它是这四大件中最简单、最基础的一个。离开了数据结构,几乎任何的程序都会失效,所以在讨论数据结构的时候,常常要把算法也连带着说一说。
要单纯地掌握常见的数据结构,就如同拆解一个个精妙的仪器件一样有趣和简单。正因为数据结构这个东西在程序中的作用,和仪器部件特别相像,不同的数据结构有着不同的特性,因此要想学好数据结构,图解是必备武器!
这里强推中国大学上,浙江大学的开设的《数据结构》课程,涵盖了常用的数据结构和算法。


辅以教材参考书,强推《大话数据结构》,光看封面你就知道这本书的风格了
没错,这就是大名鼎鼎的《大话设计模式》的作者出的,绝对顶。


三、怎么学习算法
算法课常常和数据结构课放在一起,在有些高校中,会存在“数据结构与算法”和“算法设计与分析”这样的两门课。
学习算法的套路很简单,多看、多写、多上机,既然是思想的集合,看得多了,自然无师自通。
至于刷题,很多同学都知道要刷牛客网。
牛客题库:(415题)
总共400多道题,而且有些题,非常难,想全部刷透,也至少刷半年。这显然不适合绝大部分同学。
所以,我们要找到最核心、最重要的题集,即可
比如,如果时间紧张,可以先刷《面试必刷TOP101》里的题目,总共101题。
刷完以后,有时间,可以再刷《剑指offfer》的题目,共81题。
因为这两本书,都是面向面试的高频题汇总,自然有很多题目是重合的。这也正能说明这两本书的重要性。
如果专攻面试的话,还有两本不错的书推荐:


《编程珠玑》这本书的豆瓣评分非常高,有 9 分。
这本书最大的特色就是讲了很多针对海量数据的处理技巧。这个可能是其他算法书籍很少涉及的。面试的时候,海量数据处理的问题也是经常会问的,特别是校招面试。不管是开拓眼界,还是应付面试,这本书都很值得一看。


《编程之美》这本书有多位作者,其中绝大部分是微软的工程师,所以书的质量很有保证。不过,这里面的算法题目稍微有点难,也不是很系统,这也是我把它归到面试这一部分的原因。如果你有一定基础,也喜欢钻研些算法问题,或者要面试 Google、Facebook 这样的公司,可以拿这本书里的题,先来自测一下。
当然,我也有一本谷歌师兄总结的高频面试算法习题集,包含了常见的数据结构和算法汇总,无论是排版还是内容,都是非常棒。




所有这些书,我都为大家找到并下载好了,需要的小伙伴可以直接领取。这回得帮我点赞了吧
四、算法太难懂?那是你不知道有这些模拟网站
算法的难点在于,根本没办法在脑子里抽象出它的步骤啊
对于做个几何题都费劲的男孩子来说,那更是要了他的亲命了。
今天,我就给大家推荐几个算法可视化的网站。
没错,就是写了代码以后,可以看见他们是怎么一步步求出结果的。
1、https://visualgo.net/en
目前网站支持中文,印尼文,日文等多语言版本。
最关键的是,它几乎包含了所有算法!!!!


在搜索选项中你可以根据关键词查找到你想要的算法。
点进去一个具体的算法之后,会有两种方式的可视化呈现方式,一种是电子讲座模式,一种是示例模式。其中示例模式是以动画方式呈现,你可以控制动画的快进与倒退,电子讲座模式是以知识点讲解模式呈现,你可以手动控制页面的进度。两种方式都可以帮助你演示每个步骤的过程代码。
接下来我们演示一下冒泡排序的执行过程,如下图所示:



另外,你还可以创建一组自定义的数,然后让动画显示“你的算法”。


除此之外,还支持在线测试哟~


2、Algorithm Visualizer
在Algorithm Visualizer,大家可以很清楚的看到算法运行的整个过程,很直观,便于大家学习。


大家可以很清楚的看到,网站分为三部分,最左边是算法目录,大家可以选择自己感兴趣的算法,目前已经包括了很多算法了,比如二叉树、图、排序算法、动态规划等等经典算法 。中间区域主要是算法演示以及运行log。右侧是代码以及算法运行按钮。
我们用它来演示一下冒泡排序的执行过程,如下图所示:



同时它是开源的,目前有35K个star,足以可见该项目的欢迎程度,这里推荐给要学习算法的各位。
https://github.com/algorithm-visualizer/algorithm-visualizer


3、Data Structure Visualization
目前已经有很多常用的数据结构与算法的可视化,如:常见的数组、链表、队列、二叉搜索树、红黑树、各种排序等,如下图所示:


比如,我们用它来模拟一个二叉搜索树,如下图所示:



我们再用它来演示一下快速排序算法,如下图所示:



把这些内容学会,算法应该说是非常牢固了,无论是校招还是工作,都已经非常够用了。
但程序员的人生不是只有算法的学习,我们还有校招、面试、青春饭等等的困惑,我把我这些年的所知所得,整理成了一本书,开源到github上了。相信会对大家很有帮助,大家可以去看.
目前还在持续更新,欢迎大家star。
地址:https://github.com/harvic/FightingCoder


好了,这篇就到这了,希望大家毕业都能找到好工作。
我是 @启舰 ,原创不易,帮我点个赞吧。
本人所有文章皆为原创,著作权归@启舰 所有,未经授权,转载必究
至少留美转码圈里,一般人家问,leetcode没基础难吗,下面回答就是,啊你好好学下cs50/mit 6.0001,再cs61a,61b学完,然后leetcode死命刷就是了。为什么呢?因为你要留美,找工作的时候不可避免的就要面对算法题,有的项目干脆课也就随便上上了,偏学术的课一概不上,留出巨量的时间给学生刷leetcode。你要是一直觉得leetcode难,刷不出来,那就可能只能回国了。如果你上来就营造leetcode难的氛围,那不是等于自我否定自己选校,自学课程,研究美国政策,研究什么西雅图和湾区哪个地方就业机会更多,更宜居之类的所谓的努力了吗?
所以,leetcode在一些人眼里,必须是不那么难的,至少得是死命刷之后只能攻克的,绝对不能是基础不牢就刷不出来的。就算课学的差不多了,开始刷leetcode的时候感觉抓耳挠腮了,那也要坚信,多练练就好了。不然咋办呢,有些人觉得回国就完蛋了,996,高房价,全要如海啸般扑过来。当然我认识的一些人,刷刷刷还是能刷出点名堂的,但是能不能刷出头,也要看情况的,比如“刷题氛围”(是不是同学全在一起疯狂刷题,讨论),比如项目时长,比如课业压力,还要看每个人悟性,决心,基础,等等。
所以至少在“转码留美圈”里,也不是说leetcode简单,只是说转码刷题,至少有一定可行性,而且说“多刷刷还是挺有希望上岸的”,也是一种鼓励。转码刷题,总比转文学,商科,传媒,社会学强吧(刷题和达到英语母语水平,确实刷题更简单)。总比转数学,物理强吧(没基础看这些和天书差不多)。总比转医学,法律强吧(本地人先卷死你,压根没资格转)。相比之下,刷leetcode,确实更“简单”。不过就怕哪天美国大公司也变得和其他一些国家一样,不再那么看leetcode,而是特别在乎科班出身,项目经验,基础知识和实习,工作经验,或者和现在的澳大利亚一样,it工作也大面积要求有身份,那光刷leetcode也没啥用了。
当然有些人也会被“打倒”,或者说放弃。有小部分人来转码,读读没多久就自己退学了。也有的项目时间不长,眼见找工作无望,毕业就不挣扎回国了。不过有时刷leetcode可能也是个大力出奇迹的过程。之前认识个四大会计师事务所的,辞职来美国转码了。(话说四大会计师事务所,真是个神奇的地方,靠自己的包装,营销,骗来了不少学生,包括一些没怎么在国内实习,但是总体履历还不错的留学生。然后又靠不咋地的工资,加班到凌晨的变态工作量,导致不少人对国内私企职场彻底ptsd,很多人干不满两年甚至一年就跑了,之后躺平的躺平,考公的考公,然后也有部分人就run了,我认识的文商科转码,不少都是四大跑出来的,都是下定决心跑了)。他读的项目是个排名很低,地段也偏的学校,两年不到就要毕业。后来他申请了延毕,结果还是没上岸。然后又挂靠了一年cpt,终于上岸了。在延期毕业和cpt那一年,这个人可以说每天除了学东西,刷题,就是投简历找工作,最后就是堆时间来弥补基础,领悟能力的短板了。他几个没回去的同学,也是走差不多路子上岸的。其实一些科班cs本硕的,不少人不怎么肯这么干的,毕竟科班本硕回国也还不错,没必要这么蹉跎。总之,转码刷leetcode找工作这条路,就是读研期间狂刷,各种投简历,不行的话延毕(如果可以的话),接着刷。再不行就二硕/挂靠cpt/icc(当然现在听说icc也不是想进就进了),然后接着刷题接着找工作,靠堆时间。再不行怎么办?那就一个字,寄!转专业大龄没有像样工作经验回国,想想就酸爽。
所以至少在我的理解里,对于北美转码圈,“贬低leetcode难度”,更多是相比较而言,这条路还能走走,比其他路子简单点有希望点,仅此而已。
leetcode如果能在没有刷过题,没有背过算法代码的前提下一次性通过eazy题,说明这个人的逻辑思维和写代码能力不差。
如果能在没有刷题背算法的情况下一次性通过medium,说明这个人很聪明,而且这样的人已经偏差值超过平均人群不少了。
如果能在只有编程,一些基础数据结构和复杂度了解的背景下一遍做出hard题,那这种人称他一句天才也不是很过分。
当然你要是把面试常见题型全刷了一遍bfs,单调栈,bitmap dp代码都背的滚瓜烂熟然后还做不出来medium那么只能说你挺笨的。
因为它是一个面向北美面试收录题目的网站,
于是面试不出现的题目都几乎没有。
由于早期北美面试的算法题确实都相对简单,于是leetcode的难度也是实实在在,字面意思的简单。
现在1000+以后的题目算起来,该有的算法它都有了,虽然有难度的还很少。
下面来谈谈过往今来。
北美早期的面试难度(2019年以前),就和某机构宣传的一样“带名字的算法的都不考”。
于是leetcode也一样,
带名字的经典教科书算法几乎都没有,就连矩阵链乘法这样经典的不带名字的,教科书级别算法都不录入,只有一个类似的炸气球,而且此类题目还极少。这些都是是中级和高级算法课的内容,你如果读了硕士上了算法课,考你这些真的是合情合理。
这种“带名字的算法题都没有”导致的结果就是,许多人刷leetcode,刷了半天都不知道自己在做什么
尤其对于转专业的选手来说,这就是先天的劣势。
就比如说,早期的leetcode,是没有MST的,也不需要用到Kruskal,就算有也可以用别的办法巧妙的规避掉。或者那些题直接就是普通的union find,不用union find也可以做出来。
在一些没有系统学习算法的人看来,sort一下input然后union find就是一个union find的小改动版本,完全不会和Kruskal联系起来,更意识不到Kruskal能解的题,一般Prim也能解,某些特定的时候该用哪个也不清楚。
也许早几年(19年及以前)你遇到这题,随便把它秒了,面试官就会觉得你很厉害了,你不需要知道算法的名字,你只需要知道你用union find或者是priority queue就行了。你不用分析用它们的利弊,你只要给出时间复杂度,知道是最优解就行了。
但是现如今,这样的水平还想要过面试,那恐怕你没有一点种族或者别的方面的天赋是不行的。
系统地掌握一下进阶一点的算法,达到能对比kruskal和Prim这样的水平,才比较保险。
“带名字的算法都不考”这句话,就在过去的两三年内噼里啪啦被打脸。FAANG里面某A开头的厂,出的OA表示,“不带名字的算法我们都不考”。一时间,什么Kruskal/Dijkstra/Prim/KMP等等这些乱七八糟的带名字的算法全出来了。
自900题以后直到现在的2000+题,对于那种只做过所谓的经典leetcode前400-500题,几乎没有接触过题号1000+的选手来说,你做北美的面试,和不会做leetcode其实是没啥区别的。
然而题目的难度都显示是mid,在许多人看来,后面的题无非都是些和前面题目类似的变体题,改了描述加了条件而已。让人意识不到的是新加的条件不是乱加的,往往加一个条件,算法就升级了,从Union find变成了kruskal, 从BFS变成了prim。
当然了,你如果做过竞赛题就另当别论了,因为像比如洛谷这种,一开始就有许多这样的题目。
我以上提到的这些算法内容,还只是研究生级别的算法1,还有算法2。
这个算法2教的东西又深入一点,是建议准备读phd的人上的课。显然这样的算法,面试是不太会考了。
leetcode还有另外一个问题就是,题目里面很少需要用到数据类型之间的转换,因为这种题目被踩得很多,对新手不友好,纯粹为了练习算法的人做起来也会觉得很烦。
最开始它是有的,后来都慢慢移除了。可是面试的时候,很多面试官就喜欢通过改数据类型来增加难度。
[收藏本文] 【下载本文】
   科技知识 最新文章
《消失的问界里》为什么网传华为选择大面积
特斯拉万人大裁员涉及中国市场,销售部门是
媒体报道「特斯拉一天内失去 2 个高管和 10
去年是「大模型元年」,今年会是「AI应用落
2024 年人工智能方向的就业前景怎么样?
如何评价小米汽车SU7全球首例无故抛锚?
如何评价比亚迪与大疆合作发布的车载无人机
如何看待波音「吹哨人」遗言曝光:如果我出
电动汽车为什么一下爆发了?
怎么看待华为太空宽带计划?
上一篇文章      下一篇文章      查看所有文章
加:2024-03-22 13:19:11  更:2024-03-22 13:40:48 
 
 
股票涨跌实时统计 涨停板选股 分时图选股 跌停板选股 K线图选股 成交量选股 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事
网站联系: qq:121756557 email:121756557@qq.com  天天财汇