45. Jump Game II - Medium 前往題目 想法 從後往前,但不知道怎麼判斷最小跳幾次 思路這種題目無非就是窮舉,優化就是記憶法,但是這題只需要判斷哪個選擇最有潛力,也就是貪心思想 從前往後 每次紀錄最遠可以跳到哪 如果來到剛剛著陸的地方就再跳一次,跳到目前最遠的位置 Codeclass Solution { public int jump(int[] nums) { int f 2024-03-07 Leetcode > Medium #Leetcode #心得 #Array #Greedy #Dynamic Programming
72. Edit Distance - Medium 前往題目 思路 二維dp,分別是i和j,word1與word2的指針 i, j代表取word1和word2的前i和前j個 如此一來,base case就是word1取了前幾個,word2取0個,那每次都會等於i;相同的,word1取0個,word2取了前幾個,每次都等於j 從左到右一個一個看,當前的字母都一樣的話那代表什麼都不用做,所以就等於上次(i - 1, j - 1)的操作數 如果不一樣, 2024-03-07 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming
97. Interleaving String - Medium 前往題目 思路這題畫二維陣列會清楚許多 檢查s1和s2的長度加起來是否和s3一樣長,因為s1和s2是組成s3的所有部分 dp二維陣列,一維與二維,指的是s1和s2的指針,true代表當前取的s1和s2可以成功組成s3的一部分,false則不行 dp的確定條件是dp[s1的長度][s2的長度]為true,因為那個位置代表s1和s2都看過一遍,可以成功組成s3 從後往前疊代,由dp的確定條件慢慢往 2024-03-06 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming
CS:APP 電腦系統:程式設計師的角度 第二章之一-Information Storage筆記 二進制非常適合機器來儲存以及處理訊息,而且有很多方式可以輕鬆的表達二進制,例如: punched card上的洞 線上的高低電壓 磁場的順時針與逆時針 二進制有以下三種常見的表示數字方式: Unsigned Two's-complement Floating-point 一些特性 用32bit的int來計算以下算式會溢出變為負數,這和電腦如何表示以及儲存數字有關 $200 * 3 2024-03-05 電腦科學 > Computer Systems - A Programmer's Perspective #Computer System
494. Target Sum - Medium 前往題目 想法 dp,但轉換方程不知道該拿什麼作為第一維,什麼作為第二維 思路 利用memoization和dp dp的一維是(目前在哪個index, 然後當前的總和是多少),第二維就是該組合可以有幾種方式達成,也就是題目要求的結果 從第0 index開始,檢查是否已經計算過,沒有的話繼續呼叫方法,index要加1,因為要看下一個了,而當前總和要減去當前的index的值 把所有的狀況都列出來就 2024-03-05 Leetcode > Medium #Leetcode #心得 #Array #Dynamic Programming #Backtracking
518. Coin Change II - Medium 前往題目 思路好多種解法,應該說有很多優化的方式,大致上遵循以下規則 bottom-up的方式,從最基礎的case(amount = 0無論是任何硬幣都有一種可能可以達成)開始 疊代不同的硬幣慢慢的加上所有可能性 這題畫二維陣列就會很清楚了 Code 只使用DFS會超時,因為每次都要重算 // TLE class Solution { private Map<Pai 2024-03-01 Leetcode > Medium #Leetcode #心得 #Array #Dynamic Programming
309. Best Time to Buy and Sell Stock with Cooldown - Medium 前往題目 思路一如其他dp題目,轉換公式是最重要的 有三種狀況 持有 賣出 冷卻 如果當前選擇持有,那昨天只會有兩種可能 持有 冷卻,然後今天選擇持有所以要扣掉今天的價格 如果當前選擇賣出,那只有一種可能,昨天是持有的,而今天賣出,所以加上今天的賣出價 如果當前選擇冷卻,昨天就有兩種可能 同樣是冷卻(不可能持有,因為要賣出才會冷卻,所以昨天冷卻今天一樣可以選擇冷卻,即等待的意思) 賣出 2024-02-29 Leetcode > Medium #Leetcode #心得 #Array #Dynamic Programming
1143. Longest Common Subsequence - Medium 前往題目 想法 毫無想法,看提示也不懂,幾乎沒做過2d DP 思路這題要畫2d陣列才會清楚 2d陣列,bottom up 從右下開始,如果遇到相同的字,那就代表值在右下,因為text1和text2都前進一格,所以當前的值為1+右下的值 如果沒有相同,那就看是右邊格子的數值大還是下面的 簡單來說就是top down是遇到相同的字就往右下,不是就往右和往下找,所以反過來推就是bottom up 2024-02-28 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming
647. Palindromic Substrings - Medium 前往題目 思路有兩種解法,暴力和Manacher algorithm(馬拉車) 暴力解 疊代整個string 把每個char都當作是中心點,用雙指針向外擴張找尋palindrome 奇數長度的palindrome找一輪,偶數長度也找一輪 最終就是答案 馬拉車實在是複雜,所以就跳過了 Code class Solution { public int countSubstri 2024-02-27 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming
213. House Robber II - Medium 前往題目 思路這題的關鍵是如何盡量像House Robber I 分成兩部分,不搶第一間與不搶最後一間,這樣問題就變成House Robber I 各自循環找出最大值 Code文字解析 class Solution { public int rob(int[] nums) { // 邊界條件 if (nums.length == 2024-02-26 Leetcode > Medium #Leetcode #心得 #Array #Dynamic Programming