道生一 一生二 二生三 三生万物 / from 0 to 1 / Leetcode超级菜鸟先写哪一题
筆者已經(jīng)用蠻多篇文章鼓勵(lì)演算法菜鳥工程師踏出第一步了
But!
But!!
這邊先踩個(gè)煞車!
先別那么急著刷題!
(我又要開始搬運(yùn)Huli的文章了)
如果你是剛開始寫code的超級(jí)菜鳥工程師,
強(qiáng)烈建議看完這兩篇Huli的文章!
[ALG101] 先別急著寫leetcode | Lidemy 鋰學(xué)院
程式解題新手入門注意事項(xiàng)- Huli
的確筆者也看到過很多(甚至是資工系的)新手,像Huli描述的一樣,
“可以獨(dú)立寫出一些簡單的應(yīng)用程式,
可是對(duì)于一些我認(rèn)為再簡單不過的題目,卻卡關(guān)卡很久。
例如說判斷質(zhì)數(shù)、印出九九乘法表的那些題目”
這些新手也可能是看到簡單的題目時(shí),想得到(暴力解的)作法
但是沒辦法很準(zhǔn)確的把可以work的想法化成很正確的演算法
常常也沒辦法把正確的演算法寫成正確的code
遑論寫出能成功通過所有測(cè)資的code
如果讀者就是這么新的新手
那可能直接開始leetcode的話學(xué)習(xí)曲線太陡峭了,
筆者建議先用一些比leetcode還簡單,有點(diǎn)練習(xí)程式語法意味的網(wǎng)站多做練習(xí)
Edabit
Codewars
(筆者是有實(shí)際用過這兩個(gè)網(wǎng)站的,題目品質(zhì)都還不錯(cuò),
就是UX做的沒有Leetcode那么好,而且題目難度離實(shí)際面試還有一段距離)
當(dāng)你你開始熟悉這些非常簡單的練習(xí)把想法化成正確無誤的code的題目之后
可以再回到leetcode平臺(tái)
寫一些最簡單的leetcode題目
首先是leetcode最簡單的一題 : LC2235
Add Two Integers - LeetCode
(這題卡關(guān)的話不要跟我說你是工程師....)
(題外話如果你覺得這題很簡單的話可以看看別人是怎么寫這題的
21 different ways to solve this problem - LeetCode Discuss)
菜到不行的新手可以利用這題熟悉一下Leetcod的UI,
要怎么一次測(cè)所有題目給的測(cè)資,
如何注意題目的Constraints,怎么在console自定義想要測(cè)的測(cè)資,
怎么樣是WA,怎么樣會(huì)TLE,怎么看討論區(qū),
怎么樣用printf或是console.log在leetcode平臺(tái)debug
AC之后要怎么看自己的memory和runtime分布,和看到別人的code都怎么寫
這些基本的leetcode網(wǎng)站操作練熟之后再進(jìn)到下一步
以上文字不夠精確的部分推一個(gè)圖文并茂的教學(xué):
[番外篇] 解LeetCode 之前
再來,對(duì)于沒寫過Leetcode但在工作上已經(jīng)不是菜鳥的工程師們
筆者推薦從這個(gè)網(wǎng)站的最后一題(leetcode最簡單的題目,題目rating 1084) 開始往回寫
https://zerotrac.github.io/leetcode_problem_rating/
(如果寫了3~5題左右覺得都太簡單,也可以去寫1200/1300/1400左右rating的題目)
這些是leetcode里面最簡單的題目,解法應(yīng)該不至于太難想到,
很多array相關(guān)的題目也不需要特別的基礎(chǔ)演算法先備知識(shí)(Tree/LinkedList那些),
新手可以多利用這些題目練習(xí)程式語法,和把自己的想法(演算法)化成正確無誤code的能力
要注意的是很多新手可能會(huì)看到這些題目會(huì)覺得很簡單懶得寫
但是實(shí)際上要真的寫到AC其實(shí)沒有想像中簡單,
雖然這些easy題不會(huì)在複雜度上限制太多,常常是暴力解寫出來就可以過,
但新手就是會(huì)在各種意想不到的地方忘記加大括號(hào)
變數(shù)複製過要改的時(shí)候忘記改名,if else里面的判斷式寫出來的跟腦袋想的不一樣等等等等地方犯錯(cuò)
先AC個(gè)20題再嫌題目簡單也不遲
筆者強(qiáng)烈建議踏出第一步(AC leetcode 2235)之后
可以先在這些題目里面練習(xí)一陣子
一可以練手感練語法也練習(xí)細(xì)心地讀懂英文題目,
二可以給自己一些信心和成就感跟繼續(xù)熟悉leetcode這個(gè)平臺(tái)
三可以用這些簡單的題目養(yǎng)成每天都要寫一點(diǎn)題目的習(xí)慣
如果array相關(guān)的題目都寫的差不多了,可能會(huì)發(fā)現(xiàn)有很多明明也是標(biāo)Easy,AC率超高的題目看都看不懂或是解答看不懂,其實(shí)就是因?yàn)樯倭艘恍┖芑A(chǔ)很重要的DSA先備知識(shí),建議直接開始學(xué)習(xí)的DSA topic是
hash table (Leetcode天字號(hào)第一題就是在考hash table Two Sum - LeetCode)
linked-list
binary tree and recursion and dfs
stack and dfs
queue and bfs
關(guān)于這些topic的相關(guān)圖文教材可能要請(qǐng)讀者自行Google
筆者在 演算法比你想像的重要 一文中已經(jīng)推薦過一些教材
我最喜歡的是
演算法學(xué)習(xí)之-Leetcode-破關(guān)總指南(一). 新手村與基本功訓(xùn)練
和
neetcode
另外筆者聽過許多人都推薦Leetcode的 Explore Learn的教學(xué)和study plan(但筆者自己沒用過)
LeetCode Explore
LeetCode Study Plan
友站連結(jié)
刷題也算一種電競(jìng)吧:演算法與資料結(jié)構(gòu)筆者也覺得寫得很棒!
總之
慢慢練習(xí)慢慢讓自己看到題數(shù)有在增長,
練習(xí)持續(xù)地獲得成就感以建立正回饋迴路也是刷題之路不可或缺的一部分
然而
也千萬不要覺得自己刷rating1400以下的300題就跟別人leetcode寫300題一樣厲害了
題目難易度的差距是非常大的,
problem rating 1400以下題目的難度大概是一個(gè)contest rating 1800+工程師一天可以輕鬆寫50題的難度
如果發(fā)現(xiàn)1400以下的題目真的沒什么好挑戰(zhàn)了
請(qǐng)趕快前進(jìn)到下一步(下一篇文章)
挑戰(zhàn)大名鼎鼎的Blind 75 LeetCode Questions
題外話,如果你是超級(jí)英文苦手的工程師,最能把你難倒的部分是題目的英文敘述的話
Leetcode是有中文網(wǎng)站跟中文討論區(qū)的,而且題目和測(cè)資跟題號(hào)會(huì)跟英文那邊完全一模一樣
https://leetcode.cn/problems/add-two-integers/
(但是如果有以任何外商為目標(biāo)的話完全不建議看中文的討論區(qū)...
你終究要學(xué)英文的... 為何不一開始就學(xué)..? 會(huì)錯(cuò)失很多學(xué)習(xí)重要專有名詞的機(jī)會(huì)....)
總結(jié)
以上是生活随笔為你收集整理的道生一 一生二 二生三 三生万物 / from 0 to 1 / Leetcode超级菜鸟先写哪一题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工厂方法设计模式
- 下一篇: linux android(linux