石頭遊戲,兩個人輪流選石頭,Alex 先選,每次只能選開頭或結尾,最終獲得石頭總數多的人獲勝。 乍看之下不好想到可以用 DP 解,但其實可用一個 2D-state 去描述遞迴的狀態。 這題一開始會好奇是因為負評倒讚很多,個人是感覺能從 Game Theory 單純想出這結論也是蠻厲害的…


石頭遊戲,兩個人輪流選石頭,Alex 先選,每次只能選開頭或結尾,最終獲得石頭總數多的人獲勝。 乍看之下不好想到可以用 DP 解,但其實可用一個 2D-state 去描述遞迴的狀態。 這題一開始會好奇是因為負評倒讚很多,個人是感覺能從 Game Theory 單純想出這結論也是蠻厲害的…

這題是求最長相同的子序列,可用 Dynamic Programing 來做,最難的還是想出狀態函數。這裡使用 2D-dp ,其中 dp[i][j] 表示 :
- text1 的前 i 個字符
- text2 的前 j 個字符
的最長相同的子序列的字符個數

這題是 62. Unique Paths 的延伸,能選擇往下或往右走直至終點為止,要求出有多少種可能走法,但多了一個限制,會在路徑中加了一些 obstacle 擋住了某些路徑。是一道典型的 Dynamic Programming - 2D matrix 類型的題目。和爬樓梯等都屬於動態規劃中常見題目,因此也經常會被用於面試之中。

一道很經典的題目,是給定一 string ,能不能分被拆分成 wordDict 裡面的單詞。注意這題,wordDict 裡面的單詞可以重複使用,即單詞使用沒有次數限制,所以 string 可以分成任意段,這就增加了題目的難度。解法蠻多種的,可先從 brute force 下手,再加上暫存優化後,就是蠻標準的 dp 解了,來解一下吧。

這題我看起來也是很技巧性的題目,一開始要把 subarray 的特性掌握的淋漓盡致,並且想到用 hashmap 來建立快速查找關係,真的有點困難…但也是這道題的魅力吧 ! 基本上 hashmap 題目大概都會偏向這種步驟應用,多注意可以讓自己視野開闊。

這題是 Google 面試題,在 Hide Hint 中表示可以使用 binary-search 解決,剛開始覺得蠻 tricky 的,但仔細思考會覺得 binary-search 很符合這題目。

這題第一眼其實看不太出來是 graph 題,但仔細分析會發現是一個單詞,然後能 reach 到的是換一個字母的單詞,就是鄰居;然後要找最短路徑。 難就是難在一開始要把問題轉化成一個 graph!

尋找第 k 大的數字,注意是排序後的第 k 個最大元素,而不是第 k 個不同的元素。解題上是經典的使用 priority_queue 的題目,但對於這個問題,還可以使用 quick select ,也是個蠻好的解法。

這題需求是要合併 k 個 linked-list 成一個大的 linked-list,每個 linked-list 都是有序的,且大的 linked-list 也必須是有序的,是 LeetCode21. Merge Two Sorted Lists 的進階題,但本題可用 min heap 解題,還蠻巧妙的,故紀錄一下。

LeetCode21. Merge Two Sorted Lists這道題目主要是熟悉 linked-list 相關重點,例如:
- dummy head
- 當新 Linked List 加完所有的節點後,需要返回其頭節點的 next,即
dummy.next這些技巧在後續解決 Linked List 題目時會反覆用到。

