不宜太久

 主要还是看自己掌握程度,我见过刷200题就上岸的,也见过刷1000题面试答不上来的,所以刷题就刷题,别关乎时间,别给自己设限。
然后,分阶段,根据不同侧重点去刷题,不管对找工还是学习,都有用。
 
一、初学阶段:
连续刷题1-2周,大概刷个50题左右,先去了解算法与数据结构(比如双指针,哈希,链表,字符串)的应用。
在这个阶段,你可能会觉得很难受,没有方向也没动力,这时候你需要多看多抄别人的代码,学别人的思路。
实在没思路的,可以根据这套《新手必刷编程50题》免费练习,不多不少刚刚好50道,设计基本数据类型,判断语句,数组循环,字符串与循环,栈与队列,简单递归几个知识点。
①基本数据类型
 https://www.lintcode.com/problem/1
 https://www.lintcode.com/problem/37
 https://www.lintcode.com/problem/764
 https://www.lintcode.com/problem/1300
②判断语句
 https://www.lintcode.com/problem/23
 https://www.lintcode.com/problem/766
 https://www.lintcode.com/problem/145
 https://www.lintcode.com/problem/1141
 https://www.lintcode.com/problem/478
 https://www.lintcode.com/problem/283
③数组与循环
 https://www.lintcode.com/problem/25
 https://www.lintcode.com/problem/214
 https://www.lintcode.com/problem/485
 https://www.lintcode.com/problem/539
 https://www.lintcode.com/problem/297
 https://www.lintcode.com/problem/484
 https://www.lintcode.com/problem/9
 https://www.lintcode.com/problem/220
 https://www.lintcode.com/problem/407
 https://www.lintcode.com/problem/807
 https://www.lintcode.com/problem/463
 https://www.lintcode.com/problem/298
 https://www.lintcode.com/problem/479
 https://www.lintcode.com/problem/46
 https://www.lintcode.com/problem/768
 https://www.lintcode.com/problem/1334
 https://www.lintcode.com/problem/767
 https://www.lintcode.com/problem/235
 https://www.lintcode.com/problem/53
 https://www.lintcode.com/problem/50
④字符串与循环
 https://www.lintcode.com/problem/8
 https://www.lintcode.com/problem/491
 https://www.lintcode.com/problem/146
 https://www.lintcode.com/problem/422
 https://www.lintcode.com/problem/353
 https://www.lintcode.com/problem/936
 https://www.lintcode.com/problem/241
 https://www.lintcode.com/problem/13
 https://www.lintcode.com/problem/1535
 https://www.lintcode.com/problem/1343
 https://www.lintcode.com/problem/133
⑤栈与队列
 https://www.lintcode.com/problem/263
 https://www.lintcode.com/problem/423
 https://www.lintcode.com/problem/495
 https://www.lintcode.com/problem/492
 https://www.lintcode.com/problem/771
⑥简单递归
 https://www.lintcode.com/problem/366
 https://www.lintcode.com/problem/66
 https://www.lintcode.com/problem/67
 https://www.lintcode.com/problem/68
二、中级阶段
此时简单逻辑已经理清楚,更多的是注重算法上的逻辑运用。这个阶段你可能需要刷50-80题,重点去掌握:链表、二分法、二分答案、相向双指针、宽度优先搜索、二叉树遍历、二叉树&分治法、二叉搜索树、深度优先搜索、坐标型动态规划、背包型动态规划、匹配型动态规划等。
主要还是锻炼你的逻辑和熟练程度,在不处理过于复杂的问题的情况下,能够提高自己的code能力和质量。
同样,根据这个思路可以试着去刷《进阶必刷编程80题》,这些题我自己都刷过,覆盖面还是非常广的,刷完去面试中小企业基本没啥问题。
链表:
 https://www.lintcode.com/problem/35
 https://www.lintcode.com/problem/36
 https://www.lintcode.com/problem/450
 https://www.lintcode.com/problem/228
 https://www.lintcode.com/problem/102
 https://www.lintcode.com/problem/103
 98 · Sort List - LintCode
二分法:
 https://www.lintcode.com/problem/14
 https://www.lintcode.com/problem/28
 https://www.lintcode.com/problem/75
 https://www.lintcode.com/problem/457
 https://www.lintcode.com/problem/458
二分答案:
 https://www.lintcode.com/problem/183
 https://www.lintcode.com/problem/437
 https://www.lintcode.com/problem/319
 https://www.lintcode.com/problem/963
相向双指针:
 https://www.lintcode.com/problem/56
 https://www.lintcode.com/problem/57
 https://www.lintcode.com/problem/58
 https://www.lintcode.com/problem/363
 https://www.lintcode.com/problem/539
 https://www.lintcode.com/problem/6
 https://www.lintcode.com/problem/32
 https://www.lintcode.com/problem/521
 https://www.lintcode.com/problem/1870
 https://www.lintcode.com/problem/328
 https://www.lintcode.com/problem/547
 https://www.lintcode.com/problem/406
宽度优先搜索:
 https://www.lintcode.com/problem/433
 https://www.lintcode.com/problem/615
 https://www.lintcode.com/problem/630
 https://www.lintcode.com/problem/120
 https://www.lintcode.com/problem/178/
 https://www.lintcode.com/problem/278
 https://www.lintcode.com/problem/787
二叉树遍历:
 https://www.lintcode.com/problem/66
 https://www.lintcode.com/problem/67
 https://www.lintcode.com/problem/68
 https://www.lintcode.com/problem/69
 https://www.lintcode.com/problem/73
 https://www.lintcode.com/problem/72
二叉树&分治法:
 https://www.lintcode.com/problem/468
 https://www.lintcode.com/problem/854
 https://www.lintcode.com/problem/596
 https://www.lintcode.com/problem/628
 https://www.lintcode.com/problem/597
二叉搜索树:
 https://www.lintcode.com/problem/902
 https://www.lintcode.com/problem/915
 https://www.lintcode.com/problem/85
 https://www.lintcode.com/problem/95
 https://www.lintcode.com/problem/689
深度优先搜索:
 https://www.lintcode.com/problem/1909
 https://www.lintcode.com/problem/634
 https://www.lintcode.com/problem/802
 https://www.lintcode.com/problem/652
 https://www.lintcode.com/problem/169
 https://www.lintcode.com/problem/425
 https://www.lintcode.com/problem/33
坐标型动态规划:
 https://www.lintcode.com/problem/114
 https://www.lintcode.com/problem/115
 https://www.lintcode.com/problem/1861
 https://www.lintcode.com/problem/1827
 https://www.lintcode.com/problem/76
 https://www.lintcode.com/problem/109
 https://www.lintcode.com/problem/1702
背包型动态规划:
 https://www.lintcode.com/problem/669
 https://www.lintcode.com/problem/564
 https://www.lintcode.com/problem/92
 https://www.lintcode.com/problem/1915
 https://www.lintcode.com/problem/1800
 https://www.lintcode.com/problem/125
 https://www.lintcode.com/problem/440
 https://www.lintcode.com/problem/562
 https://www.lintcode.com/problem/563
 https://www.lintcode.com/problem/724
三、 代码实现&提升代码质量
如何更快更好的做到代码实现,刷一题抵得过别人刷三题,建议不使用题海战术,而是找方法提升刷题质量。这里浅浅的分享一份刷题模板

 浅浅举个例子
面试中经常会遇到双指针,有了思路不会解怎么办?
使用条件
滑动窗口(90%)
时间复杂度 O(n)(80%是双指针)
要求原地操作,只可以使用交换,不能使用额外空间(80%)
有子数组 subarray / 字符串 substring 的关键词 (50%)
有回文 Palindrome 关键词(50%)
复杂度
时间复杂度: O(n)
- 时间复杂度与最内层循环主体的执行次数有关
- 与有多少重循环无关
空间复杂度: O(1)
只需要分配两个指针的额外内存
代码模板
 Java
 
 Python
 
 同样的方式套用变形题再试试看,你应该会有不同的体会
- 两数之和VII(同向双指针)
 其次,实现代码之后,不断优化自己的代码质量,这里分享提升代码质量的12个技巧
Coding Style
- 二元运算符两边加空格,单元运算符不加空格
- 花括号和 for, if 之间要加空格(Java),圆括号和 if 之间要加空格
- 用空行分隔开不同的逻辑块
- 逗号后面加空格
Readability
- 函数名和变量名用1-2个单词作为名称
- 确保一个函数内部不超过 3 层缩进(indention)
- 多用子函数来减少入口函数的代码量
- 多用 continue 少用 if
Bug Free
- 不管有没有可能出问题,都要对入口函数的参数进行异常检测
- 访问一个下标的时候,一定要确保这个下标不会越界
- 访问一个对象的属性或者方法时,一定要确保这个对象不是空
- 不用全局变量
四、有针对性的刷大厂真题
不同大厂在题库设定和考察思路上会有些许不同,但万变不离其宗。如果你是奔着上岸去的,建议多刷心仪公司的算法题,这里是我整理的大厂面试高频算法题,其中就包含了BATJ等众多一线大厂的算法真题及详解,希望对你有所帮助。
 
 字节
- 会议室 3
- 用Rand7()实现Rand10()
- Asteroid Collision
- 不同岛屿的数量II
- 删除二叉查找树的节点
- 组合新数字
- 食物集合
- 恢复数组
- 雀魂启动!
- 删除字符
腾讯
- 最短休息日
- 解压字符串
- 中位数
- 洪水填充
- 移除箱子
- 最小分解
- 歌曲时间
- 数字消除
- 视野争夺
- 逆序对
…
掌握至此,不用刷500题,也能轻松收获大厂offer










