笔者已经用蛮多篇文章鼓励演算法菜鸟工程师踏出第一步了

But!

But!!

这边先踩个煞车!

先别那么急着刷题!
(我又要开始搬运Huli的文章了)
如果你是刚开始写code的超级菜鸟工程师,
强烈建议看完这两篇Huli的文章!

[ALG101] 先别急着写leetcode | Lidemy 锂学院
程式解题新手入门注意事项- Huli

的确笔者也看到过很多(甚至是资工系的)新手,像Huli描述的一样,

“可以独立写出一些简单的应用程式,
可是对于一些我认为再简单不过的题目,却卡关卡很久。
例如说判断质数、印出九九乘法表的那些题目”

这些新手也可能是看到简单的题目时,想得到(暴力解的)作法
但是没办法很準确的把可以work的想法化成很正确的演算法
常常也没办法把正确的演算法写成正确的code
遑论写出能成功通过所有测资的code

如果读者就是这么新的新手
那可能直接开始leetcode的话学习曲线太陡峭了,
笔者建议先用一些比leetcode还简单,有点练习程式语法意味的网站多做练习
Edabit
Codewars
(笔者是有实际用过这两个网站的,题目品质都还不错,
就是UX做的没有Leetcode那么好,而且题目难度离实际面试还有一段距离)

当你你开始熟悉这些非常简单的练习把想法化成正确无误的code的题目之后
可以再回到leetcode平台
写一些最简单的leetcode题目

首先是leetcode最简单的一题 : LC2235
Add Two Integers – LeetCode
(这题卡关的话不要跟我说你是工程师….)
(题外话如果你觉得这题很简单的话可以看看别人是怎么写这题的
21 different ways to solve this problem – LeetCode Discuss)

菜到不行的新手可以利用这题熟悉一下Leetcod的UI,
要怎么一次测所有题目给的测资,
如何注意题目的Constraints,怎么在console自定义想要测的测资,
怎么样是WA,怎么样会TLE,怎么看讨论区,
怎么样用printf或是console.log在leetcode平台debug
AC之后要怎么看自己的memory和runtime分布,和看到别人的code都怎么写
这些基本的leetcode网站操作练熟之后再进到下一步
以上文字不够精确的部分推一个图文并茂的教学:
[番外篇] 解LeetCode 之前


再来,对于没写过Leetcode但在工作上已经不是菜鸟的工程师们
笔者推荐从这个网站的最后一题(leetcode最简单的题目,题目rating 1084) 开始往回写
https://zerotrac.github.io/leetcode_problem_rating/

(如果写了3~5题左右觉得都太简单,也可以去写1200/1300/1400左右rating的题目)
这些是leetcode里面最简单的题目,解法应该不至于太难想到,
很多array相关的题目也不需要特别的基础演算法先备知识(Tree/LinkedList那些),
新手可以多利用这些题目练习程式语法,和把自己的想法(演算法)化成正确无误code的能力

要注意的是很多新手可能会看到这些题目会觉得很简单懒得写
但是实际上要真的写到AC其实没有想像中简单,
虽然这些easy题不会在複杂度上限制太多,常常是暴力解写出来就可以过,
但新手就是会在各种意想不到的地方忘记加大括号
变数複製过要改的时候忘记改名,if else里面的判断式写出来的跟脑袋想的不一样等等等等地方犯错
先AC个20题再嫌题目简单也不迟

笔者强烈建议踏出第一步(AC leetcode 2235)之后
可以先在这些题目里面练习一阵子
一可以练手感练语法也练习细心地读懂英文题目,
二可以给自己一些信心和成就感跟继续熟悉leetcode这个平台
三可以用这些简单的题目养成每天都要写一点题目的习惯

如果array相关的题目都写的差不多了,可能会发现有很多明明也是标Easy,AC率超高的题目看都看不懂或是解答看不懂,其实就是因为少了一些很基础很重要的DSA先备知识,建议直接开始学习的DSA topic是

hash table (Leetcode天字号第一题就是在考hash table Two Sum – LeetCode)

linked-list

binary tree and recursion and dfs

stack and dfs

queue and bfs

关于这些topic的相关图文教材可能要请读者自行Google
笔者在 演算法比你想像的重要 一文中已经推荐过一些教材
我最喜欢的是
演算法学习之-Leetcode-破关总指南(一). 新手村与基本功训练

neetcode
另外笔者听过许多人都推荐Leetcode的 Explore Learn的教学和study plan(但笔者自己没用过)
LeetCode Explore
LeetCode Study Plan
友站连结
刷题也算一种电竞吧:演算法与资料结构笔者也觉得写得很棒!


总之
慢慢练习慢慢让自己看到题数有在增长,
练习持续地获得成就感以建立正回馈迴路也是刷题之路不可或缺的一部分

然而
也千万不要觉得自己刷rating1400以下的300题就跟别人leetcode写300题一样厉害了
题目难易度的差距是非常大的,
problem rating 1400以下题目的难度大概是一个contest rating 1800+工程师一天可以轻鬆写50题的难度
如果发现1400以下的题目真的没什么好挑战了
请赶快前进到下一步(下一篇文章)
挑战大名鼎鼎的Blind 75 LeetCode Questions

题外话,如果你是超级英文苦手的工程师,最能把你难倒的部分是题目的英文叙述的话
Leetcode是有中文网站跟中文讨论区的,而且题目和测资跟题号会跟英文那边完全一模一样
https://leetcode.cn/problems/add-two-integers/
(但是如果有以任何外商为目标的话完全不建议看中文的讨论区…
你终究要学英文的… 为何不一开始就学..? 会错失很多学习重要专有名词的机会….)