今年的2月比往常更長,不是因為比往年多了一天,而是被病毒隔離在家的日子顯得十分漫長,如果再不給自己找點事情做的話,且不論身體方面的健康狀況,精神方面可能也會有些隱憂,做為一名工程師,適時地讀上幾本平日可能沒時間閱讀的好書,應當是不錯的選項,而除此之外,也可以做點有趣的演算法題目以做消遣,
當今,LeetCode這個網站已經廣為人知,打算刷演算法題時,它幾乎是必然的選擇,當然國外還有CodeWar,國內也有牛客網這樣的備選,不過由于幾年前也曾在LeetCode上玩過幾題的關系,當再次有刷題想法的時候,還是回歸到那熟悉而又陌生的地方,
最開始的時候可能也只打算投入幾天的時間去重溫下做題的感覺,但隨著隔離時間的延長,且年內計劃也制訂了認真研習演算法這一項,不知不覺每日持續做題的日子已經過去一個月了,
迄今為止,簡單難度的題目做了68道,中等難度的題目做了42道,困難難度的2道,總計112道,
先刷的是簡單的題目,閑來一天可以做個5,6題,再之后開始做中等難度的,每日堅持做3題,至于困難的題目,則是無事可做時想嘗試下挑戰的,當然這樣的結果是必然查找功略才能有些線索,
LeetCode經過數年的發展,已經從最初的觸手可及的100多道題,變成為擁有1364題的真正意義上的題庫,這個數字記錄截止于2020/2/29,之后肯定還會增加,(在做題的時候就發現其偷偷地又多了幾題)
我刷題的方式不是如他人一般選取其前幾百題做為開端,而是采用主題突破的策略,
在LeetCode網頁的右側有各種主題的匯總,
- 陣列 226
- 動態規化 185
- 數學 171
- 字串 159
- 樹 128
- 哈希表 122
- 深度優先搜索 117
- 二分查找 84
- 貪心演算法 73
- 廣度優先演算法 65
- 雙指標 60
- 堆疊 54
- 回溯演算法 53
- 設計 46
- 位運算 44
- 排序 43
- 圖 40
- 鏈表 37
- 堆 34
- 并查集 29
- 滑動視窗 20
- 分冶演算法 19
- 字典樹 17
- 遞回 15
- 線段樹 12
- 有序字典 10
- 佇列 9
- 極小極大演算法 8
- 二叉索引樹 6
- 行掃描演算法 6
- 隨機演算法 6
- 拓撲排序 6
- 迷題 5
- 幾何演算法 5
- 二叉查找樹 2
- 拒絕采樣 2
- 水庫采樣 2
- 旋轉哈希 2
- 記憶 1
- 后綴陣列 1
可以看到在各個主題之中,渉及陣列的題目占比最多,稍做思考,不難想出這一結果也合乎情理,畢竟陣列是最基本的資料結構,如果不把其弄清楚,想明白,更沒有能力去觸及其它演算法與資料結構的內容了,
于是順乎其理,我以陣列這一主題開始了演算法新旅程,剛入手時其題目數還是224道,結果兩周后又增加了2道,目前還未有進一步的更新,所以并不清楚LeetCode題庫更新的頻率,
在刷題的時候會發現,一道題目往往不僅牽扯單一主題,還會與其它主題相關,做這類題目時獲得的識訓往往也更多,同時網站上確實有功能可以將題目所附的標簽顯示出來,建議最初時不要打開這一選項,因為知道了題目的特性,可能也就明白了解題的思路,但在剛開始答題的階段,這樣的提示并不有利于思考,只有在自身經過一番推敲琢磨之后,再查看這些資訊,才能獲得更佳體驗,
當然,做這些題目,尤其是中等以上難度的題目,既使花上幾個小時,解不出題,也是正常的情況,本人便是一例,因為之前沒有仔細在演算法方面打磨過自己,對演算法題的生疏也是在所難免,這并非要給自己找一個推脫的借口,演算法,就像其它有價值的能力一樣必須要經過相當時間的刻意練習,才可以達成某種程度的熟練度,
種一棵樹最好的時間是十年前,其次是現在,既然十年前自己沒有努力提升演算法能力,那么到了今日,還有這個念想的話,只有邁步前行一個方法而已,
這里只是些閑談,并不會詳細記錄每道題的解法,在刷完陣列主題所有題目后應該會有一篇比較詳實的記錄,這里又定了個小計劃,再之后將會聚焦于LeetCode中100道最受喜愛的題目,完成后繼續做總結,然后會是動態規劃主題,還是需要總結,如此這般持續進行,雖然期望在一年內完成所有題目,但估計不太可行,不如退而求其次,能夠養成經常做演算法題目的習慣,反而會是更好的識訓,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205316.html
標籤:其他
上一篇:動態順序表操作
