摘要:斬從第題開始,到現(xiàn)在也差不多快一年了,回顧紀(jì)念一下。當(dāng)時對回溯動態(tài)規(guī)劃也都只是上課的時候?qū)W過,也并不熟練。最經(jīng)典的例子就是斐波那契數(shù)列了,求第項數(shù)列的值。
leetcode 100 斬!從第 1 題開始,到現(xiàn)在也差不多快一年了,回顧紀(jì)念一下。
為什么開始刷題?從大一就知道了 leetcode,但刷題總是三天打魚,兩天曬網(wǎng),會發(fā)現(xiàn)刷過的題,隔一段時間再看還是需要很久才能再想起來,于是就萌發(fā)了刷一題總結(jié)一題的想法。
另一方面,leetcode 上的 discuss 里一些解,有時候講解的很少,甚至只丟一些代碼,對于我等這種菜鳥有時候看的太廢勁了,所以不如自己把各種解法都理清楚,然后詳細的總結(jié)出來,也方便其他人更好的理解。
剛開始的感覺大一的時候,聽過 ACM,然后暑假也去學(xué)校的 ACM 集訓(xùn)試了試,但當(dāng)時基礎(chǔ)太差了,棧和隊列都不知道是什么,所以也就沒有走上 ACM 的道路。之后就各種學(xué)安卓、web、后端的應(yīng)用開發(fā)的一些東西了。后來準(zhǔn)備開始刷題是大四畢業(yè)的時候了吧。
當(dāng)時對回溯、動態(tài)規(guī)劃也都只是上課的時候?qū)W過,也并不熟練。開始幾題的時候,也都很慢,很多都自己想不出來。然后就去看別人的題解。看完以后,就什么都不看,然后按自己的思路再寫一遍代碼。
尤其是第 5 題,求最長回文序列,現(xiàn)在都印象深刻,記得當(dāng)時用了好幾天才把所有解法總結(jié)了出來。
所以大家如果想刷題的話,也不用怕自己基礎(chǔ)不好,大不了哪些名詞不會就去查,一點點積累就可以,重要的是開始和堅持。
現(xiàn)在的感覺從開始可能只是覺得該刷一刷題,到現(xiàn)在可能真的是愛上了刷題。
現(xiàn)在刷題基本可以想出一種思路,有時候甚至和最優(yōu)解想到了一起,還會想出一些別人沒有想到的解法,這種成就感可能就是打游戲超神的感覺吧,哈哈。
此外,看 discuss 的時候,每當(dāng)看到令人拍案稱奇的思路的時候,真的是讓人心曠神怡,開心的不得了,就像中了彩票一樣的開心,趕快去和同學(xué)分享。
有時候也會看到一些讓人捧腹的評論,題目是輸入一個字符串,輸出所有可能的 ip 地址。
Input: "25525511135"
Output: ["255.255.11.135","255.255.111.35"]
在總結(jié)的過程中,因為力求給他人講懂,在理清思路的動機的過程中,會發(fā)現(xiàn)之前的想法可能是錯的,會總結(jié)著總結(jié)著就明白了另一種解法,或者產(chǎn)生新的想法,或者明白各個解法相互之間的聯(lián)系,會比僅僅 AC 多出很多收獲。
從理清他人的想法,再到自己寫出代碼,再到把各個解法用自己的理解串起來,會有一種「紙上得來終覺淺,絕知此事要躬行」的感覺。有時候雖然大的框架有了,但是小的細節(jié)方面還是需要自己去體會。為什么加這個 if?為什么是小于等于?每一句代碼的產(chǎn)生都是有原因的,絕不會是可有可無的代碼。
所以雖然一道題從看題,理解,自己考慮,看別人解法,到重新實現(xiàn),再到總結(jié)出來,可能需要 3、4 個小時,甚至 5、6 個小時或者更多,但我覺得是值得的。
此外,也有很多人加自己的微信過來亦或是感謝自己,亦或是指出錯誤,亦或是詢問問題,亦或是沒說過話的,哈哈。有微軟、谷歌、百度、阿里、騰訊的大佬,有各個大學(xué)的學(xué)生,甚至巧的是還能加上高中的校友,世界真小,哈哈。
上邊是最近加的一些人,每次收到別人的稱贊自己也會很開心。此外,博客是直接放在 github 上的,目前也有 280 stars 了,是自己 github 上 start 數(shù)最多的項目了,說來也慚愧,希望以后自己努力可以有一個好的開源項目。
刷題的理解一些人可能會糾結(jié)用什么語言去刷,其實沒必要糾結(jié)的。刷題需要考慮的是算法,而不是語言。算法就像是從家里到超市該怎么走?出門左拐,右拐直走….而語言是我們選擇的交通工具,騎車?步行?開車?平衡車?每種交通工具都有自己的優(yōu)點和缺點,語言也是如此。而好的算法可能更像是,我們偶然發(fā)現(xiàn)了一條近路,降低了我們的時間復(fù)雜度或者是空間復(fù)雜度。
刷了 100 道題了,我覺得必須要掌握的就是遞歸的思想了,利用這個思想可以解大部分的題了。計算機擅長的就是記憶以及速度,而遞歸可以把這兩個優(yōu)勢發(fā)揮到極致。遇到問題以后,我們可以考慮如何把大問題分解成小問題,想出來以后,代碼很容易就出來了。
此外,一些遞歸可以用動態(tài)規(guī)劃的思想改寫,從而優(yōu)化遞歸壓棧所消耗的時間,遞歸是頂部到底部再回到頂部,而動態(tài)規(guī)劃通過存儲,直接從底部到頂部解決問題。
最經(jīng)典的例子就是斐波那契數(shù)列了,求第 n 項數(shù)列的值。
斐波那契數(shù)列,指的是這樣一個數(shù)列:1、1、2、3、5、8、13、21、34 …… 在數(shù)學(xué)上,斐波納契數(shù)列定義如下:F ( 0 ) = 0,F(xiàn) ( 1 ) = 1 , F ( n ) = F ( n - 1 ) + F ( n - 2 )(n >= 2,n ∈ N*);
如果用遞歸的思想去寫,代碼簡潔而優(yōu)雅。
long Fibonacci(int n){ if (n == 0) return 0; else if (n == 1) return 1; else return Fibonacci(n-1) + Fibonacci(n-2); }
當(dāng)然,這樣的話太慢了,優(yōu)化的話,就是把遞歸過程的結(jié)果保存起來,或者就是改寫成動態(tài)規(guī)劃,最強的是其實是有一個公式的,直接利用公式就可以。
此外,還有一些題目就是根據(jù)題目的理解去寫代碼了,沒有什么特殊的技巧。
未來的打算當(dāng)然是繼續(xù)刷下去了,很開心,每天不刷一刷題會不習(xí)慣的,希望大家也早日感受到刷題的樂趣,哈哈。
在線地址:https://leetcode.wang,域名也比較好記,希望對大家會有幫助。
我是用 gitbook 搭建的,我覺得上邊「搜索」的插件很好用,可以直接根據(jù)關(guān)鍵字搜出來自己想做的題。
知乎專欄也會同步更新:https://zhuanlan.zhihu.com/le...。
越努力,越幸運,共勉。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75366.html
摘要:極簡爬蟲攻防戰(zhàn)紀(jì)要爬蟲是構(gòu)建搜索引擎的基礎(chǔ)負責(zé)抓取網(wǎng)頁信息并對網(wǎng)頁識別分類及過濾。爬蟲方終于鎖定了第一場戰(zhàn)役的勝局由于斷崖式技術(shù)的出現(xiàn),反爬方在瀏覽器識別戰(zhàn)役上望風(fēng)披靡。經(jīng)過反爬方的精心運作,逐漸有效削弱了敵方的攻勢。 極簡爬蟲攻防戰(zhàn)紀(jì)要 ? ??爬蟲是構(gòu)建搜索引擎的基礎(chǔ), 負責(zé)抓取網(wǎng)頁信息并對網(wǎng)頁識別、分類及過濾。我們熟識的電商、搜索、新聞及各大門戶網(wǎng)站都有強大的爬蟲集群在每...
摘要:寫在前面今天這篇文章是貪心算法系列的第三篇劃分字母區(qū)間。前文回顧貪心算法分發(fā)糖果刷題匯總匯總貼今日題目字符串由小寫字母組成。返回一個表示每個字符串片段的長度的列表。示例輸入輸出解釋劃分結(jié)果為。每個字母最多出現(xiàn)在一個片段中。 寫在前面 今天這篇文章是貪心算法系列的第三篇--劃分字母區(qū)間。 前文回顧: 【LeetCode】貪心算法--分發(fā)糖果(135) 刷題匯總: 【LeetCode】匯總...
摘要:題目給定一個二維網(wǎng)格和一個單詞,找出該單詞是否存在于網(wǎng)格中。單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中相鄰單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內(nèi)的字母不允許被重復(fù)使用。 題目 給定一個二維網(wǎng)格和一個單詞,找出該單詞是否存在于網(wǎng)格中。 單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中相鄰單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內(nèi)的字母不允...
摘要:題目給定一個二維網(wǎng)格和一個單詞,找出該單詞是否存在于網(wǎng)格中。單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中相鄰單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內(nèi)的字母不允許被重復(fù)使用。 題目 給定一個二維網(wǎng)格和一個單詞,找出該單詞是否存在于網(wǎng)格中。 單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中相鄰單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內(nèi)的字母不允...
摘要:我記得大三參加騰訊的校招面試時只準(zhǔn)備了幾種常見的排序算法就足以應(yīng)對了,然而今年包括今日頭條在內(nèi)的多家大廠的前端筆試題目中都出現(xiàn)了貪心算法動態(tài)規(guī)劃分治算法等進階性的算法題目。本篇博客參考今日頭條銀國徽老師的《js版數(shù)據(jù)結(jié)構(gòu)與算法》Part1改編自《漫畫算法》原作者:程序員小灰前言眾所周知,與后臺開發(fā)人員相比,算法是我們前端開發(fā)人員的一個弱項。而近兩年隨著互聯(lián)網(wǎng)行業(yè)競爭愈發(fā)激烈,市場上對前端崗位...
閱讀 1998·2019-08-30 15:54
閱讀 3547·2019-08-30 15:52
閱讀 1834·2019-08-29 17:20
閱讀 2530·2019-08-29 17:08
閱讀 2357·2019-08-26 13:24
閱讀 806·2019-08-26 11:59
閱讀 2792·2019-08-23 14:50
閱讀 630·2019-08-23 14:20