這篇文章最先發在我團隊的文檔中。個人團隊鼓勵每一個同窗都在業餘時間多作算法題,特別是新人。我的認爲在編程能力的提高上比作 side project 更有用,對職業發展也是如此。固然出於興趣作的 side project 另當別論。轉到這裏,但願對各位讀者有用。算法
持續作算法題的目的仍然是自身能力提高。能夠繼續細化成三點:編程
爲了更有效地實現上面的目標。推薦用下面的方式來作題:數組
在刷題的過程當中很是最容易產生挫敗感,沒法堅持。緣由是,長時間的思考致使疲倦,屢次積累的疲倦使得本身產生了 抵觸記憶。以致於會下意識以爲作題就是 刻苦。
推薦你們在開始以前看看《意志力》。裏面指出 喜愛 是會被記憶操控的,若是每次作一件事最後留下的映像都是輕鬆愉快的,那麼人就會愈來愈喜歡作此事,反之厭惡。因此爲了能保持作題的興趣,務必每次要主動給本身留下好的記憶。
番茄時鐘可以很好地保障不會出現 長時間 的思考,同時也能保障不容易 疲倦。若是你已經能很熟練的使用番茄時鐘,請跳過。若是你對番茄時鐘的印象仍然只是20分鐘休息一次。那麼請繼續閱讀。
番茄時鐘有兩個重點,一是經過長期的訓練,讓大腦習慣在一段時間內保持高效。二是經過要求每次在開始前有規劃和每次結束後有總結,保障產出。當把這兩點應用到作算法的過程當中時,應該採起如下的方式:數據結構
目前 leetcode 上的題大體可分爲兩種類型:數據結構和算法
在這個分析過程當中首先要大體判斷出屬於哪一類。在掌握了基本的數據結構和算法後,應該能很好的判斷是否是屬於前兩類。若是判斷不出說明須要回頭先從新複習基本數據結構。推薦《算法》一書。不要強行刷題。算法書的每種數據結構及算法的大概思路、解決的問題以及相應的時間和空間複雜度瞭解以後能夠再回來。ide
例子:https://leetcode.com/problems/valid-number/description/函數
這個番茄時鐘內的目標是:性能
完成後應該有的總結是:學習
若是發如今要用的技術中有不熟悉的地方,應該當即中斷,開啓另外一個番茄時鐘進行學習。切忌盲目嘗試。當發現有不肯定的地方時,從新開啓一個番茄時鐘,按照當前思路把不肯定地方當成一個單獨的算法問題進行解決。優化
例子:https://leetcode.com/problems/reverse-pairs/
這一類題目一般採起遍歷的方法必定都能找到解法。重點是找到最優解,所以須要提早有足夠的數據結構的知識。數據結構可大體分爲鏈(數組、棧、隊列)、樹、圖。在這三類數據中要分別掌握排序和查找算法。特別是相應的時間複雜度。
這類題目很好判斷,一般題目中會描述了幾個數據或者狀態的關聯的關係,而後須要你找出符合條件的某些數據。那麼將題目中的關聯關係轉換成相應的數據結構,再使用對應算法就夠了。要對數據結構的足夠熟悉,才能知道如何轉化。
這種狀況下番茄時鐘的目標是:
總結是:
例子:https://leetcode.com/problems/minimum-window-substring/
這一類狀況最好用排除法,發現不是第一種或者第二種,那麼再往這種狀況下考慮。這類題的特色是一般是發散性質,剛看到題目容易有思路,但不太容易找到最優解。這種狀況下,也要先判斷題目子類型。
在這種狀況下,番茄時鐘的目標:
總結:
當分析完以後,建議不要開始寫代碼,必定要休息片刻。執行階段是對咱們平時寫代碼狀態的一種鍛鍊,應該很是珍惜。若是一個番茄時鐘執行不完,應該拆分紅多個。在這段時間中,設定的番茄時鐘目標應該是:
要實現執行高效,最重要的是養成良好的編碼習慣,不要犯小錯誤。要始終朝着只要想清楚了,一次寫好,不要調試的狀態要求本身。這裏常見的小錯誤有:
調試超過寫代碼時間 30% 時說明狀態很是有問題。在這個階段的總結是:
若是中間發現了分析階段的錯誤或者疏漏。應該當即結束編碼,休息。而且從新開啓分析階段的時鐘。切忌邊寫邊改方案。若是發現編碼過程狀態不夠好,應該加長休息時間,或者乾脆結束掉。不要給本身留下低效的映像。將任務留到次日其實也能夠檢驗本身第一天的思路是否足夠系統化,若是是,那麼次日應該能很快的從新找回思路。
必定要作好總結,特別是當沒有解出題來,沒有思路的時候,必定要經過結束階段的總結來反思犯了什麼錯誤。解出來了也必定要總結題目的特色,題目中哪些要素是解出該題的關鍵。不作總結的話,花掉的時間所獲得的收穫一般只有 50% 左右。
在題目完成後,要特別注意總結此題最後是概括到哪一種類型中,它在這種類型中的獨特之處是什麼。通過總結,這樣題目纔會變成你在此問題域中的積累。
作好總結,讓每道題都有最大的收穫。一個月以後本身的狀態應該會有很大變化。
在這個倉庫中進行解題分享時,建議你們就把本身番茄時鐘的執行記錄進行分享。最後標準的解法以及思路其實在 discussion 中都有。對他人有用的分享不是結果,而是:
祝各位成長快樂。