成为ACM金牌选手后,他的LeetCode刷题经验GitHub获800星

本文作者:加贺,ACM金牌选手,九章算法助教

刷题,就是很痛苦很打击的过程,是不断怀疑自己适不适合搞CS这行的过程

我曾在中厂、大厂都工作过,也常年担任面试官。面试跟共事的人多了,总结出了这样的现象:

有的人天生适合玩ACM,连题都不带刷的

有的人刷了400-500到题,连中厂面试都过不了

没办法,这就叫做幸存者偏差。

能怎么办呢?不能靠智商占领技术高低的话,那只能接受现实:好好刷题

一遍一遍的刷题,总结总结再总结,实战实战再实战,坚持下来,你会获得本质上的提升。

所以,我爆肝了一套《程序员进阶必刷编程80题》,同时在Github上获得了800多颗星星,希望那些在学习或事业上遭遇瓶颈的同学能够在这套题中找到学习思路,不断进步。

成为ACM金牌选手后,他的LeetCode刷题经验GitHub获800星_第1张图片

我认为,高效的刷题思路应该是这样的:

1、直接看答案,理解解题思路,然后自己思考,并用实际例子来验证反推,理解这段code的精髓

2、先按自己的思路写code,然后再于答案比对

3、重复上述两个步骤,不断刷,不断实践,重复多此,很快就能熟悉下来

4、在不看提示的情况下,给其他人讲清楚这道题的思路,讲清楚后就可以练习下一道了

我将进阶式刷题分为十二个阶段

阶段一:链表

翻转链表(一) Algorithms

翻转链表(二)

K组翻转链表

链表的中点

带环链表

带环链表 II

链表排序

阶段二:二分法

二分查找

搜索二维矩阵

寻找峰值

经典二分查找问题

目标最后位置

阶段三:二分答案

木材加工

书籍复印

方阵排队

评委出题

阶段四:相向双指针

两数之和

三数之和

四数之和

接雨水

移动零

合并排序数组

最小子串覆盖

去除重复元素

全零子串的数量

字符串划分

两数组的交集

和大于S的最小子数组

阶段五:宽度优先搜索

岛屿的个数

课程表

骑士的最短路径II

单词接龙

图是否是树

绘制填充

迷宫

阶段六:二叉树遍历

二叉树的前序遍历

二叉树的中序遍历

二叉树的后序遍历

二叉树的层次遍历

前序遍历和中序遍历树构造二叉树

中序遍历和后序遍历树构造二叉树

阶段七:二叉树&分治法

对称二叉树

二叉树中最近的叶子

最小子树

最大子树

具有最大平均数的子树

阶段八:二叉树搜索树

BST中第K小的元素

BST的中序前驱节点

在二叉查找树中插入节点

验证二叉查找树

两数之和 - BST版本

阶段九:深度优先搜索

订单分配

单词矩阵

数独

因式分解

汉诺塔

电话号码的字母组合

N皇后问题(一)

阶段十:坐标型动态规划

不同的路径

不同的路径 II

老鼠跳跃

停在原地的方案数2

最长上升子序列

数字三角形

不同的子序列 II

阶段十一:背包型动态规划

换硬币

组合总和 IV

背包问题

举重

浮点数组合和

背包问题(二)

背包问题 III

背包问题 IV

背包问题 V

最小划分

阶段十二:匹配型动态规划

编辑距离

最长公共子序列

最长公共子串

正则表达式匹配

通配符匹配

你可能感兴趣的:(二叉树,链表,面试,算法,数据结构)