实习&工作

Leetcode刷题经验

写在前面

毫无疑问,对于面试者代码能力的考察,是面试很重要的部分,尤其是近些年,几乎互联网大厂都加强了对于代码能力的考察,尤其是字节跳动对代码的考察最为严格,体现在两个方面,一是初试,也就是机试会给你2-3道编程题,在规定的时间内进行作答,通过一定的测试样例会有相应的得分,拿到一定的分数才能进入下一轮的面试,有些公司甚至根据做题个数定位面试者的薪水档位。二是面试手撕代码,面试官当场出题,盯着你给你一定的时间完成一个特定的算法题,比较考察面试者在高压下的编码能力。如果手撕代码失败,这轮面试也会大概率凉凉,所以在面试之前有一定的刷题数是十分必要的。

本人利用大四保研时间,做了leetcode站上700道算法题,分享一下自己的做题经验和技巧。本人leetcode个人主页:Amazingt

注:本教程只适合在本科期间没有ACM经验的,算法比较薄弱的学生。ACM算法和LeetCode难度不在一个水平。有ACM经验/奖牌的大佬可以忽略这条经验。

什么是LeetCode

LeetCode无疑是找工作刷题的首选网站,其次还有牛客网(UI太乱,不够清爽)等等,但是很多手撕代码的经典题都来源于leetcode原题。目前leetcode有中文站、英文站两种.

中文站

英文站(国际服)

leetcode的题分为Easy , Mid , Hard三个难度,一般的公司考察到Mid基本就差不多,最近几年由于内卷严重,Hard考察也屡见不鲜(尤其是字节跳动),建议大家根据自己的水平循序渐进。如果不满足于Leetcode,可以去做更难的OJ,当然这是更好的,多学总没有坏处。

怎么刷

首先建议初学者使用中文站,熟悉代码的提交方法,并熟悉整个站的组成,初学者应该从探索卡片刷起,熟悉基本的算法概念。建议初学者使用C++/JAVA来进行刷题,不建议使用Python,强大的api会让初学者基础不牢。

你需要了解的数据结构和算法有

  • 数据结构
  1. 数组。包括数组(一维,二维)前缀和、差分,数组的一些基本操作,添加删除等。

  2. 栈。栈特别是要注意单调栈的使用,这是一个经常的考的考点。

  3. 队列与优先队列。队列用于BFS中,优先队列一般是为了降低算法的复杂度。

  4. 树。最基础的,树的各种遍历方法,递归和迭代都要会。

  5. 哈希。你需要知道c++这些数据结构的用法,如何进行查找等

  6. 图。图需要会使用DFS/BFS进行遍历。其他常见的例如最短路、拓扑排序等。

    ————————下面是一些高级数据结构————————–

  7. 并查集。并查集解决联通分量,十分好用。

  8. Trie树。也叫字典树,用来解决查询问题。

  9. 树状数组、线段树。这类题较少,但是不排除考察的可能。

  • 算法
  1. 排序。各大排序算法。其中手撕快排堆排,在面试中最为常见,需要熟知每个算法的稳定性,复杂度等。

  2. 二分查找。二分查找难点在于边界的选择,和有些题,你不知道如何使用二分。

  3. 贪心。贪心算法难点在于找到贪心的策略,一般找到之后,代码十分简单。

  4. 动态规划。动态规划是比较难的一类题,没有什么比较好的方法,应该就是多做题,背套路。将DP可以分为好几大类(后面会进行补充)

  5. 位运算。位运算的题比较灵活,建议初学者学习补码,反码等计算机基础知识后,再去理解位运算。

    ————————-模板算法(只需要进行套模板)—————–

  6. 滑动窗口。滑窗题模板固定,题的类型也大同小异。只要多打几遍模板,就能熟练运用。

  7. 回溯。回溯算法模板比较固定,一般集的在递归后恢复现场即可。

  8. BFS的模板。BFS模板十分固定,一般借助队列,就可以轻松秒杀。

  9. …………..其他算法具体见leetcode上的tag

一些建议和资料

建议

对于想找一份大厂工作(又觉得ACM太难)的同学,建议从大一开始,就在leetcode上做题,我认识已经有大一1200题的学弟(自愧不如。。。)

周赛与双周赛。周赛是leetcode每周日在早上10.30-12.30一个半小时。双周赛是每两周的周六晚22.30-0.0。两个比赛都是四道题,基本前两题都是送分(有时候第二题会很难),第三题需要一定的算法知识,第四题是你成为大佬的试金石。很多人卡在常年三题(比如我。。。)每场比赛会有一定的积分奖励(可以兑换周边,做题还有衣服穿他不香嘛),而且会更新rating排名,是很好的检验自己学习成果,并锻炼自己在短时间解决问题的方法。所以极力推荐参加周赛/双周赛。

每次双周赛在B站都有大佬实况录像解题,学习别人的思考方法无疑也是重要的学习手段。推荐UP主:

喂你脚下有坑

大雪菜

lee215215

花花酱LeetCode

资料

最好的资料应该就是题解区的题解。一些国服题解少,或者质量不高,可以转向世界服(具备一定的英语能力),其次还有b站各大up如上。

同时推荐背包九讲和labuladong的算法小抄

还有很多资料需要大家自己学习去整理。

@16-Acmenwangtuo

工作

@16-larry6799