Simon Lai's Blog
  • 首頁
  • 歸檔
  • 分類
  • 標籤
  • 關於

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

139. Word Break - Medium

前往題目 之前寫的文章 想法 用trie? 思路用DP或是Trie 從最後面開始,每個character都向後匹配所有的word並檢查是否一致 一致的話就把當前dp賦值為這個word長度之後的dp,這樣只要是可以順利接上的就會是true,反之如果不是順利接上就會是false(這裡用寫的不清楚,看code會清楚很多) Codeclass Solution { public
2024-02-25
Leetcode > Medium
#Leetcode #心得 #String #Array #Hash Table #Dynamic Programming #Trie #Memoization

75. Sort Colors - Medium

前往題目 之前寫的文章 想法 數0、1、2各有幾個,然後填回原本的陣列 思路上述想法可行,但以下方法更快速 三個指針,左中右 中間指針遇到2就與右指針數值交換,並且左移右指針 中間指針遇到0就與左指針數值交換,並且右移左指針與中間指針,因為初始狀態l和mid都是0,不移動會出現l大於mid的狀況 Code直覺做法,紀錄個數 class Solution { public
2024-02-24
Leetcode > Medium
#Leetcode #心得 #Array #Two Pointers #Sorting

721. Accounts Merge - Medium

前往題目 之前寫的文章,果然這題全忘了😂 想法 名子無法當key,因為可能重複 唯一能辨別不同帳號的就只有兩個帳號都有出現相同的email,但這個email會在第一個嗎,還是有可能在任意位置… 思路 利用union find疊代每一個帳號下的每一個email,如果發現當前帳號的某個email有和另一個帳號的一樣就union 接著把相同account的email組合在一起 最後把組合好的ema
2024-02-24
Leetcode > Medium
#Leetcode #心得 #String #Array #Hash Table #Sorting #Depth-First Search #Breadth-First Search #Union Find

876. Middle of the Linked List - Easy

前往題目 想法 經典的linked list找中點 思路 快慢指針,都從0開始 直到快指針是null,或是快指針的下一個是null,跳出 這樣慢指針就會剛好在中間 Codeclass Solution { public ListNode middleNode(ListNode head) { ListNode slow = head, fast =
2024-02-23
Leetcode > Easy
#Leetcode #心得 #Two Pointers #Linked List

543. Diameter of Binary Tree - Easy

前往題目 之前寫的文章 思路 DFS 每個點的左子樹與右子樹的長度加起來再加1(本身) 這題的關鍵是每個點都有可能是拐彎的點 Codeclass Solution { int ret = 0; public int diameterOfBinaryTree(TreeNode root) { findDepth(root);
2024-02-23
Leetcode > Easy
#Leetcode #心得 #Binary Tree #Depth-First Search #Tree
1…1819202122…36

搜尋

Hexo Fluid