胡说八道!!!
我见过ACM金牌选手失意挫折,BATJ全跪的,也见过双非学渣一路过关斩将,校招就拿到字节40w大包的。
**但,这很明显是幸存者偏差啊……与其在这酸,不如老老实实承认ACM选手的综合实力普遍要比普通人强一点,至少在"ACM选手中找到优秀程序员"**的概率会大得多。
不要说ACM选手只会刷题,虽然大多数ACM选手没有工业界的经验,但是在长期以往的比赛经验和对算法的熟悉度,会让他们在实际工作中的学习速度很快,只要稍加点拨,就能快速把功能实现出来。
当然,作为前FB(现在叫meta了)的面试官,我也挂过一些coding quanlity太差的奖牌得主。因为竞赛中很多人追求的是怎么快怎么写,但是代码不易读、不易维护,还易错,这不但是面试中的大忌,更是实际工作中的做大死行为。
关于代码质量,我在我主讲的算法提升课程《九章算法班》分享过:
代码质量包括:
- Bug Free
- 好的Coding Style
- 容易让人读懂的逻辑
- 没有冗余代码
- 有边界检测和异常处理
举几个简单的实例,看看以下哪个代码质量更高:
我们可以看出:
- 面试不一定会要求你用最优复杂度的算法来解决问题
- 因此单纯只刷LC之类的OJ,容易让你产生一定要用最优解来解决这样的误区
这也可以从侧面解释,为什么acm选手不一定是优秀的程序员。
那么,作为一个非acm选手的普通人,最好的提升自己的方式就是用最短的时间刷最精华的题,提升自己的算法能力,卷死他们(不是)。
这是一些比较关键且重要的算法知识点,也是高频面试考点。相信我,刷完这套题,你会有截然不同的体验:
链表:LintCode 35 | LintCode 36 | LintCode 98 | LintCode 102 | LintCode 103 | LintCode 450 | LintCode 1609
二分法:LintCode 458 | LintCode 457 | LintCode 75 | LintCode 28 | LintCode 14
二分答案:LintCode 183 | LintCode 319 | LintCode 437 | LintCode 963
相向双指针:LintCode 6 | LintCode 32 | LintCode 56 | LintCode 57 | LintCode 58 | LintCode 328 | LintCode 363 | LintCode 406 | LintCode 521 | LintCode 539 | LintCode 547 | LintCode 1870
宽度优先搜索:LintCode 120 | LintCode 278 | LintCode 433 | LintCode 178 | LintCode 630 | LintCode 615 | LintCode 787
二叉树遍历:LintCode 66 | LintCode 67 | LintCode 68 | LintCode 69 | LintCode 72 | LintCode 73
二叉树&分治法:LintCode 596 | LintCode 468 | LintCode 597 | LintCode 628 | LintCode 854
二叉搜索树:LintCode 85 | LintCode 95 | LintCode 689 | LintCode 902 | LintCode 915
深度优先搜索:LintCode 33 | LintCode 169 | LintCode 425 | LintCode 634 | LintCode 652 | LintCode 802 | LintCode 1909
坐标型动态规划:LintCode 76 | LintCode 109 | LintCode 114 | LintCode 115 | LintCode 1702 | LintCode 1827 | LintCode 1861
背包型动态规划:LintCode 92 | LintCode 125 | LintCode 440 | LintCode 562 | LintCode 563 | LintCode 564 | LintCode 669 | LintCode 724 | LintCode 1800 | LintCode 1915