寫(xiě)了三百篇算法題解,關(guān)于如何刷題有些話我想對(duì)你說(shuō)
這篇文章憋了我挺久的,感覺(jué)都快憋出內(nèi)傷,一次次的打開(kāi) Typora 寫(xiě)幾十個(gè)字,一次次的修改刪除最后關(guān)閉 Typora,如此反復(fù)。
為什么會(huì)如此糾結(jié)?
或許是太狂妄了,我真的想讓那些看了這篇文章的人都能從中受益,無(wú)論是算法小白還是高手,導(dǎo)致文章的立意拔的太高,高到我駕馭不住,遠(yuǎn)遠(yuǎn)超出了我的實(shí)際水平,于是一次次的開(kāi)始寫(xiě),一次次的廢除。
直到最近才想明白我應(yīng)該寫(xiě)一篇什么樣的文章,這篇文章的目標(biāo)群體不是那些立志于參加 ACM 的大佬,也不是早早的就是刷了好幾百道 LeetCode 的高手,而是那些徘徊在要不要刷題、如何刷題的算法初學(xué)者們,我問(wèn)自己,當(dāng)年還是小白,為了進(jìn)大廠,在珠江新城艱難擠上地鐵后打開(kāi)手機(jī)日復(fù)一日不斷的重復(fù)看算法面試視頻時(shí), 是否想要看這樣的文章來(lái)確定方向,我的答案是會(huì),收藏然后狠狠地點(diǎn)個(gè)贊仔細(xì)的看。
開(kāi)頭稍微啰嗦了幾句,下面開(kāi)始進(jìn)入正題。
不知道你們一開(kāi)始刷算法題的時(shí)候是否有過(guò)如下的困惑。
1、題目很長(zhǎng),半天看不明白是什么意思 2、明明看懂了題目,但寫(xiě)出的代碼卻提交不通過(guò) 3、代碼寫(xiě)到一半發(fā)現(xiàn)不知道怎么往下寫(xiě)了 4、別人的題解一看就懂,但自己想破腦袋都想不出要用這種方法 5、即使刷了兩百多道題目,面試的時(shí)候一緊張還是會(huì)頭腦空白發(fā)慌
你問(wèn)我為啥知道這些?因?yàn)槲叶冀?jīng)歷過(guò)。
我們都是從應(yīng)試教育中廝殺出來(lái)的,所以對(duì)刷題應(yīng)該是挺熟悉的,缺的只是方法,人人都可以是小鎮(zhèn)做題家。
方法是什么呢?
可以歸納為兩個(gè),一個(gè)是戰(zhàn)略,一個(gè)是戰(zhàn)術(shù),猶如行軍打仗,兩手都要抓。

在戰(zhàn)略上,我們需要做到的是藐視算法題。
在戰(zhàn)術(shù)上,我們需要做到的是重視刷算法題。
一、戰(zhàn)略上藐視算法題
在戰(zhàn)略上藐視算法題的目的是為了在心理層面上克服恐懼,事實(shí)上,不僅僅是算法題,諸如學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)、計(jì)算機(jī)網(wǎng)絡(luò)、編譯原理等程序員必備的知識(shí)時(shí),有這個(gè)心態(tài)可以學(xué)起來(lái)事半功倍。
我親身經(jīng)歷過(guò)這樣的改變。
作為一個(gè)轉(zhuǎn)行程序員,在轉(zhuǎn)行學(xué)習(xí)編程的那段日子,沒(méi)有人告訴我說(shuō)要去學(xué)數(shù)據(jù)結(jié)構(gòu),也沒(méi)有人告訴我說(shuō)要去刷 LeetCode,都是靠自己一個(gè)人摸索,絕大部分的時(shí)間都花在具體項(xiàng)目上,誤認(rèn)為自己和那些已經(jīng)工作的程序員的區(qū)別在于有沒(méi)有做過(guò)項(xiàng)目。
這就是科班出身和非科班出身的學(xué)生最大的區(qū)別,科班出身的學(xué)生知道去學(xué)什么,知道大學(xué)期間安排的每一門(mén)課程是干什么的,知道要先去做哪些小項(xiàng)目來(lái)循序漸進(jìn)的編碼練習(xí),知道知識(shí)點(diǎn)在工作中能起到什么樣的具體作用,非科班出身的程序員感覺(jué)計(jì)算機(jī)相關(guān)的知識(shí)點(diǎn)簡(jiǎn)直是一團(tuán)亂麻。
這種情況導(dǎo)致我去找工作參加面試的時(shí)候,很多基礎(chǔ)面都通過(guò)不了,最后僥幸進(jìn)入一家要求不太高的創(chuàng)業(yè)公司,薪資不高,為了進(jìn)大廠必須完善算法和計(jì)算機(jī)的知識(shí)。
因?yàn)槲粗?,所以恐懼,恐懼?dǎo)致盲目的崇拜,我認(rèn)為那些科班出身的程序員太牛逼了,居然可以掌握那么多繁雜的計(jì)算機(jī)知識(shí);那些寫(xiě)源碼分析的程序員都是大神;那些寫(xiě)算法題解的程序員都是高手。
恐懼把小的問(wèn)題放大,比如學(xué)到單調(diào)棧、雙向鏈表、記憶化的內(nèi)容,一看到題目要用到這些概念便覺(jué)得代碼很難寫(xiě),索性那些內(nèi)容就不看,所以學(xué)了大半年還在原地踏步,還在原來(lái)的公司拿著微薄的工資做著 CURD。
幾個(gè)月后,創(chuàng)業(yè)公司不行了,受迫于重新找工作的壓力,只好咬著牙再去啃,再去刷題。
而當(dāng)我開(kāi)始寫(xiě)題解、做動(dòng)畫(huà)的時(shí)候,我就發(fā)現(xiàn)算法題也就那樣,缺的只是時(shí)間去不斷的重復(fù)練習(xí)。
單調(diào)棧無(wú)非就是在棧的概念基礎(chǔ)上增加了排序,記憶化也就是增加一個(gè)數(shù)組用于存儲(chǔ),動(dòng)態(tài)規(guī)劃在面試和實(shí)際工作中用到的只需要掌握百分之五就行。
抱著編程技術(shù)也就那樣的心態(tài),學(xué)習(xí)了爬蟲(chóng)以及 Vue。


“自大”的認(rèn)為爬蟲(chóng)能有多難,基本步驟無(wú)非以下幾步:
1、找到需要爬取內(nèi)容的網(wǎng)頁(yè)URL 2、打開(kāi)該網(wǎng)頁(yè)的檢查頁(yè)面 3、在 HTML 代碼中找到你要提取的數(shù)據(jù) 4、寫(xiě) Python 代碼進(jìn)行網(wǎng)頁(yè)請(qǐng)求、解析 5、存儲(chǔ)數(shù)據(jù)
下載安裝 Pycharm,安裝 Scrapy,根據(jù)步驟輸入 URL 和數(shù)據(jù)格式,在完全不懂分布式、ip代理、js加密、模擬登陸、MongoDB的前提下,順利拿到了自己想要的數(shù)據(jù)。
無(wú)論是分布式還是ip代理,爬蟲(chóng)的每個(gè)知識(shí)點(diǎn)深挖下去都大有文章,我所學(xué)習(xí)到的爬蟲(chóng)知識(shí)只是冰山一角,但這并不妨礙我們可以從戰(zhàn)略上去蔑視編程,編程的很多內(nèi)容沒(méi)有那么高不可攀,缺的只是時(shí)間去學(xué)習(xí),時(shí)間恰恰是我們可以去支配的。
二、戰(zhàn)術(shù)上重視刷題
戰(zhàn)術(shù),分為道與術(shù)。
道
回顧一下我們以前學(xué)數(shù)學(xué)的過(guò)程,會(huì)發(fā)現(xiàn),數(shù)學(xué)題有千千萬(wàn),最后在腦海中記住的并非是這道題的具體寫(xiě)法,而是解這道題的思路。
算法刷題同樣如此,很難做到讓你把做過(guò)的題目代碼都背下來(lái),然后在面試的時(shí)候一五一十的寫(xiě)出來(lái),但是你可能知道這道題的思路,用什么樣的數(shù)據(jù)結(jié)構(gòu)和什么樣的算法思想,知道可以用這樣那樣的方法做出來(lái),差的就是細(xì)節(jié)。
也就是說(shuō),刷題和應(yīng)試教育中的學(xué)習(xí)是一樣的,都需要先經(jīng)過(guò)大量刻意的重復(fù)練習(xí),見(jiàn)多識(shí)廣,才能在面試時(shí)做到游刃有余。
說(shuō)白了,就是要多刷才行。
這里的多刷題,不是指多瞎刷題,而是有方法的去刷,有目的的練習(xí),而一個(gè)合理的練習(xí)方式,比練習(xí)的時(shí)間長(zhǎng)短,更為重要。
如何做到有目的的進(jìn)行練習(xí),大概可以分為以下五個(gè)步驟:
1、找到具有定義明確的具體特定目標(biāo) 2、具有專(zhuān)注練習(xí)的狀態(tài) 3、找到導(dǎo)師模仿練習(xí) 4、走出舒適圈,突破自我 5、強(qiáng)化前行的理由
1、找到具有定義明確的具體特定目標(biāo)
目標(biāo)必須是十分具體的,可以逐個(gè)解決,把目標(biāo)進(jìn)行分類(lèi)并制定一個(gè)可實(shí)施的計(jì)劃。
目標(biāo)是什么?
通過(guò)算法面試不是目標(biāo),而是一個(gè)結(jié)果,我們的目標(biāo)是怎么樣合理的刷完算法面試需要的那些題目,推薦的做法是按照標(biāo)簽來(lái)刷,難度上循序漸進(jìn),即把多種同類(lèi)型的題先放在一起來(lái)做,比如一個(gè)時(shí)間段,只刷鏈表題,待刷得差不多的時(shí)候,接下來(lái)再刷二叉樹(shù)的題。
由于不斷的刷同個(gè)類(lèi)型的題目,相當(dāng)于在不斷的重復(fù)練習(xí),可以不斷地加深自己對(duì)某個(gè)數(shù)據(jù)結(jié)構(gòu)的理解,刷到后面可能發(fā)現(xiàn)這類(lèi)題目都是有固定的套路,甚至一部分代碼都是一模一樣的。
這種刷法不僅在大方向上找到具有定義明確的具體特定目標(biāo),即合理的刷完算法面試需要的那些題目,與此同時(shí),當(dāng)刷同類(lèi)型的題目出現(xiàn)困惑時(shí),也能有目的性的去搜索相關(guān)的特定資料。
2、具有專(zhuān)注練習(xí)的狀態(tài)
不建議在一開(kāi)始刷題就去搜索一些模板來(lái)背,然后在解題的時(shí)候套模板,這樣的刷題只是重復(fù)而不是練習(xí),收獲的只是經(jīng)歷而不是經(jīng)驗(yàn),背的再熟練,平時(shí)寫(xiě)的多塊,沒(méi)有自己的一個(gè)完整思考過(guò)程,在面試時(shí)很容易卡殼。
在刷題的過(guò)程中,爭(zhēng)取做到三件事:
1、當(dāng)寫(xiě)出 AC 的代碼時(shí),思考為什么自己可以做到
2、當(dāng)寫(xiě)出 AC 的代碼時(shí),思考能不能優(yōu)化一些
3、是否用到了題目給出的所有條件
很多題目都是由相似的題目改編而來(lái)的,增刪一些條件題目的難度就會(huì)發(fā)生巨大的提升,基于這三個(gè)思考,每道題目都去多想一步,一步一步再一步,不同維度不同姿勢(shì)都嘗試一下,不要滿足于一種解法,各種解法都寫(xiě)一寫(xiě),爭(zhēng)取做到 beat 100%,把每個(gè)題目都做干凈,徹底攻克一道題。
3、找到導(dǎo)師模仿練習(xí)
搜索任何一道算法題,在網(wǎng)上都能發(fā)現(xiàn)不少文章,不過(guò)很多文章都是只提供解題代碼或者加上一些簡(jiǎn)單的文字說(shuō)明,為什么要這么寫(xiě)以及是怎么樣想到這些方法的很少有文章會(huì)涉及到,這些人是高手,卻不是導(dǎo)師。
高手和導(dǎo)師最大的區(qū)別在于,很多高手未必可以總結(jié)出自己的方法論,他們真的很牛逼但核心內(nèi)容卻只可意會(huì)不可言傳,而導(dǎo)師一定有一套可以復(fù)制的方法論,他或許不一定是最牛逼的,但卻是最適合模仿學(xué)習(xí)的。
目前 LeetCode 的題解區(qū)有不少大神寫(xiě)了不少細(xì)致的題解,找?guī)讉€(gè)你看的順眼的,模仿他們的思路去思考問(wèn)題。
然后悄咪咪的吹一下自己,我利用動(dòng)畫(huà)的形式講解算法,寫(xiě)了幾百篇文章了,期間有不少人也在模仿我的風(fēng)格去寫(xiě)作,取得了不錯(cuò)的效果,我最近把精力花在自己的個(gè)人網(wǎng)站 AlgoMooc 上,立志于更加細(xì)致的講解 LeetCode,如果你找不到合適的導(dǎo)師,不妨訪問(wèn) https://www.algomooc.com 來(lái)看看我的文章,我爭(zhēng)取每道題目都錄制視頻,用五分鐘講清楚。
4、走出舒適圈,突破自我
當(dāng)我們跌跌撞撞的刷了一些題目時(shí),實(shí)際上,刷題已經(jīng)變成了我們的舒適圈,在這個(gè)圈子中,你已經(jīng)可以熟練的掌握了一些知識(shí),如果我們想讓練習(xí)取得成績(jī),我們得逼著自己走出舒適圈,最好的方法是自己去寫(xiě)題解,寫(xiě)一篇新手也能看懂的題解。
也就是熟知的費(fèi)曼學(xué)習(xí)法。
什么是費(fèi)曼學(xué)習(xí)法呢?
簡(jiǎn)單來(lái)說(shuō)就是以教促學(xué),每當(dāng)你認(rèn)為學(xué)會(huì)或者掌握一個(gè)知識(shí)后,去給別人講明白,通過(guò)這種方式對(duì)自己做一個(gè)檢驗(yàn),突破自我。
李笑來(lái)曾經(jīng)分享過(guò)一個(gè)觀點(diǎn),他說(shuō)教育主要分為 3 個(gè)環(huán)節(jié)——
1、 教:我們最常做的讀書(shū)、學(xué)習(xí)、聽(tīng)課等
2、 練:就是練習(xí),大量練習(xí),重復(fù)練習(xí)
3、 教練:在練習(xí)過(guò)程中遇到問(wèn)題,教練幫忙指出來(lái),然后繼續(xù)練。
1、2 不斷循環(huán),直到把知識(shí)、技能練熟,能用到實(shí)踐中,幫自己做成一些事情,創(chuàng)造價(jià)值。
以此作為參考,刷題也是可以分為 3 個(gè)環(huán)節(jié)---
1、學(xué):閱讀別人的提交 2、練:就是練習(xí),模仿別人的思路來(lái)練習(xí) 3、教:就是教練,通過(guò)寫(xiě)題解的形式給別人講明白一道題目
1、2 兩點(diǎn)屬于被動(dòng)學(xué)習(xí),吸收效率在 10% 至 30% 之間,而 3 屬于主動(dòng)學(xué)習(xí),也就是費(fèi)曼學(xué)習(xí),吸收效率高達(dá) 90% 。

也就是說(shuō),我們?cè)谒㈩}的過(guò)程中,為了提高學(xué)習(xí)效率,可以主動(dòng)的去寫(xiě)技術(shù)博客分享,注意是寫(xiě)技術(shù)博客而非技術(shù)筆記,筆記是給自己看的,博客是給別人看的,在這個(gè)過(guò)程中,表面上你是在教會(huì)別人,事實(shí)上你通過(guò)教會(huì)別人的方式來(lái)逼自己查缺補(bǔ)漏,你可能以為你懂了,結(jié)果發(fā)現(xiàn)無(wú)法表達(dá)出來(lái),事實(shí)上還是沒(méi)有理解透徹;你以為你講明白了,別人一問(wèn),發(fā)現(xiàn)還是有遺漏點(diǎn)。
5、強(qiáng)化前行的理由
當(dāng)初你覺(jué)得進(jìn)行刷題提升自己的時(shí)候,什么是你的動(dòng)力?
這個(gè)問(wèn)題最好在一開(kāi)始的時(shí)候就想清楚,并記錄下來(lái)。
在《思維的囚徒》一書(shū)中,提及到一個(gè)原則,叫:自由地選擇你的態(tài)度 —— 人無(wú)論在什么情況下,都可以自由選擇自己的態(tài)度。事實(shí)上,任何一件事情,我們都能找到它的意義,它能幫助自己變得更好的角度。
刷題這個(gè)過(guò)程必然是有難度的,會(huì)給自己很大的壓力,所以一開(kāi)始先把你認(rèn)為刷題后能帶來(lái)的積極結(jié)果寫(xiě)下來(lái),越多越好,不管現(xiàn)實(shí)與否,每當(dāng)你想要放棄的時(shí)候,多想想這些積極的結(jié)果,想想熬過(guò)這個(gè)痛苦的過(guò)程能提升多大的改變。
術(shù)
道是從宏觀角度來(lái)思考刷題,那么術(shù)則是在微觀的角度來(lái)看待每一道題目。
在具體做題的時(shí)候,可以采用以下三個(gè)步驟來(lái)進(jìn)行。
1、看懂題目
2、分析解法
3、代碼實(shí)現(xiàn)
1、看懂題目
首先就是明確題目要我們解決的是什么問(wèn)題?提供了哪些參考示例?是否提供了需要使用的數(shù)據(jù)結(jié)構(gòu)和算法?時(shí)間復(fù)雜度或者空間復(fù)雜度有沒(méi)有要求?提示的范圍有沒(méi)有比較特別的數(shù)?邊界情況是否需要特殊處理?
怎么樣去看懂題目呢?
給你個(gè)公式步驟進(jìn)行參考,即 四步分析法 !
模擬:模擬題目的運(yùn)行。 規(guī)律:嘗試總結(jié)出題目的一般規(guī)律和特點(diǎn)。 匹配:找到符合這些特點(diǎn)的數(shù)據(jù)結(jié)構(gòu)與算法。 邊界:考慮特殊情況。
結(jié)合一道具體的算法題來(lái)說(shuō)明整個(gè)過(guò)程,算法題來(lái)源于劍指 offer 上的例題:矩陣中的路徑。

1、模擬
首先看一下矩陣的初始狀態(tài)。

我們需要在這個(gè)矩陣中尋找目標(biāo)字符串 bfce,第一步要做的就是先匹配上目標(biāo)字符串的第一個(gè)元素 b,我們從矩陣的第一行第一列的元素開(kāi)始匹配,找到了 a 。

目標(biāo)字符串為 bfce,此時(shí)查找第一個(gè)元素為 a ,與目標(biāo)字符串的第一個(gè)元素 b 不相同,需要在四個(gè)方向搜索,看看能不能找到符合要求的元素,我們按照上左下右的順序進(jìn)行遍歷尋找。

上:越界了 左:越界了 下:是 s ,與目標(biāo)元素 b 不相同 右:是 b,符合要求,依葫蘆畫(huà)瓢找第二個(gè)元素

上:越界了 左:是 a,與目標(biāo)元素 f 不相同 下:是 f,與目標(biāo)元素 f 相同,符合要求,依葫蘆畫(huà)瓢找第三個(gè)元素

上:根據(jù)題目要求不需要考慮 左:是 s,與目標(biāo)元素 c 不相同 下:是 d,與目標(biāo)元素 c 不相同 右:是 c,與目標(biāo)元素 c 相同,符合要求,依葫蘆畫(huà)瓢找第四個(gè)元素

上:是 c,與目標(biāo)元素 e 不相同 左:根據(jù)題目要求不需要考慮 下:是 e,與目標(biāo)元素 e 相同,符合要求,尋找結(jié)束,匹配成功,返回 true
2、規(guī)律
1、在搜索過(guò)程中,如果當(dāng)前元素與目標(biāo)元素不匹配,則回退到之前的節(jié)點(diǎn)再搜索 2、在搜索過(guò)程中,如果當(dāng)前元素與目標(biāo)元素相匹配,則按照上左下右的方向進(jìn)行再次搜索匹配剩下的元素 3、在搜索過(guò)程中,搜索當(dāng)前元素的上左下右方向的元素時(shí),會(huì)出現(xiàn)重復(fù)訪問(wèn)之前元素的情況,比如搜索匹配成功的第三個(gè)元素 c 的四個(gè)方向時(shí),會(huì)重復(fù)訪問(wèn)一下 f。

為了保證不重復(fù)訪問(wèn)節(jié)點(diǎn),可以將這條路徑上已經(jīng)訪問(wèn)過(guò)的節(jié)點(diǎn),修改為不在 word 當(dāng)中的一個(gè)字符,保證以后再次訪問(wèn)時(shí)不會(huì)重復(fù)訪問(wèn),這里我們將其修改為特殊字符 # 。

修改完后會(huì)出現(xiàn)一種情況,當(dāng)前的節(jié)點(diǎn)元素與目標(biāo)元素相匹配,但是在它的四個(gè)方向的節(jié)點(diǎn)中都找不到可以匹配到目標(biāo)下一元素的節(jié)點(diǎn)。
比如此時(shí)當(dāng)前元素 c 與目標(biāo)元素 c 相匹配,但是目標(biāo)下一元素為 x,而在當(dāng)前元素的四個(gè)方向上都找不到 x ,需要把這個(gè)點(diǎn)回退,根據(jù)之前的操作,當(dāng)前的節(jié)點(diǎn)被修改為了 #,所以為了能夠回退成功,再回退操作時(shí)需要重新將 # 修改回原來(lái)的元素。

3、匹配
本題提供了一個(gè)矩陣,矩陣是一個(gè)二維數(shù)組,需要我們?cè)诙S數(shù)組中進(jìn)行搜索,為了能夠覆蓋所有的情況,必然要使用兩個(gè)嵌套的循環(huán)。
在搜索過(guò)程中,當(dāng)遇到匹配成功的元素,搜索其下一元素的操作與當(dāng)前的操作一致,即可以使用遞歸。
遞歸參數(shù):當(dāng)前元素在矩陣
board中的行列索引i和j,當(dāng)前目標(biāo)字符在word中的索引k。終止條件:
返回 false:
(1) 行或列索引越界
(2) 當(dāng)前矩陣元素與目標(biāo)字符不同
(3) 當(dāng)前矩陣元素已訪問(wèn)過(guò)
返回 true:
k = len(word) - 1,即字符串word已全部匹配。遞推工作:
標(biāo)記當(dāng)前矩陣元素:將 board[ i ] [ j ]修改為特殊字符 # ,代表此元素已訪問(wèn)過(guò),防止之后搜索時(shí)重復(fù)訪問(wèn)。搜索下一節(jié)點(diǎn):朝當(dāng)前元素的 上、左、下、右 四個(gè)方向開(kāi)啟下層遞歸。 回退時(shí)還原當(dāng)前矩陣元素:將 board[ i ] [ j ]元素還原至初始值,即 word[k] 。返回值: 返回布爾量
res,代表是否搜索到目標(biāo)字符串。
4、邊界
1、行越界 2、列越界 3、矩陣元素已訪問(wèn)過(guò)
2、分析解法
在看懂題目的前提下,分析解法就輕松多了, 在腦海中我們已經(jīng)大概知道了題目想要考察的方向,接下來(lái)我們需要思考的是題目的邏輯是怎么樣的,不需要考慮代碼層面。
需要注意的是,在第一遍或者第二遍解題時(shí),不要過(guò)分追求所謂奇淫技巧的解法,很多同學(xué)錯(cuò)誤的認(rèn)為了奇淫技巧等于水平高超,我之前也出現(xiàn)過(guò)這個(gè)誤解,很多 LeetCode 上的數(shù)學(xué)題都能一行或兩行代碼就 AC,每次自己寫(xiě)大半天發(fā)現(xiàn)答案竟然如此簡(jiǎn)單很是受挫。
后來(lái)發(fā)現(xiàn),這些奇淫技巧并不能提高自己的水平,除了發(fā)在評(píng)論區(qū)能引來(lái)別人一句臥槽的驚訝,從而帶來(lái)一點(diǎn)內(nèi)心虛榮心的滿足以外,其余的用處不大。
當(dāng)然,等你刷個(gè)兩三百到題目再回過(guò)頭來(lái)重新思考,你會(huì)發(fā)現(xiàn)那些奇淫技巧的方法是如此的美妙。
3、代碼實(shí)現(xiàn)
看懂了題目,有了思路,其實(shí)這道題的 90% 你已經(jīng)解決了,把它實(shí)現(xiàn)出來(lái)按理來(lái)說(shuō)就是自然而然的事兒了。
有時(shí),將一個(gè)思路轉(zhuǎn)換成算法是很容易且自然的;但有時(shí),有些思路轉(zhuǎn)換成代碼,是很有難度的事情,這就是你寫(xiě)代碼的能力問(wèn)題,其實(shí)就是練少了。
刷題說(shuō)到底還是需要題海戰(zhàn)術(shù)。
總結(jié)
呼,總是寫(xiě)完了。
希望今天的這六千字的經(jīng)驗(yàn)分享能帶給你一些思考:)
