做了Algorithm分類下的前30題。感覺題目還比較適合我,難度的分類也挺準確的,easy的大部分10分鐘之內能pass,medium的時間會長一些,hard的題目可能要想得更久一些。
前30題里面印象比較深刻的有幾道題,做得很費勁。
一個是前面提到的兩個數組中位數的問題。其實想到解法就簡單了,但我一開始沒有想清楚。還是對這個問題的本質沒把握好,不然應該想到能從相同長度的數組推廣到兩個不同長度的數組的方法。
第10題,正則表達式匹配,花了我好長好長的時間。一方面是一開始對如何回溯沒想太清楚,后來才想到應該直接回溯到星號的地方就可以了。另外這題目確實各種邊界條件太多,提交了好多次才成功。這要是面試里要求寫個bug free的代碼,那我肯定掛了。
還有3sum和4sum的問題。2sum是很簡單的,但是3sum我一開始覺得應該能有比O(n2)更快的算法,但想了很久也沒想出來。最后才知道原來這個問題的下限就是O(n2)。還有就是排序后首尾兩個指針,相加的和大于target則尾部指針向前移動,小于target則頭部指針向后移動。這個方法有點違反我的直覺,總覺得會漏掉一些解。但其實想明白了就發現就是這么回事。
4sum就相當于兩個2sum。但如何去重是很麻煩的。最后直接用HashSet來去重了。
后面幾道鏈表指針的題目都不難。多個Sorted List歸并要用到最小堆,一開始想自己寫個實現,后來偷懶還是直接用jdk自帶的PriorityQueue了。最后比較困擾我的的是生成括號這道題,其實思路很簡單,但現在要我不用遞歸寫個回溯感覺很費勁。不像七八年前的狀態,全排列我都寫不出來了。最后參考了一下遞歸的寫法,簡單又清晰。還是遞歸好哇。