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
67. Add Binary - Easy 前往題目 之前寫的文章 想法 從後面開始運算,但運算過程卡住 思路 兩個指針都從後面開始 每次循環都執行carry + aPointer + bPointer 根據當前的sum計算新的carry sum % 2加入到要回傳的String裡面 移動指針 當兩個指針都已經小於0的時候跳出 如果還有carry就加上 Codeclass Solution { public Stri 2024-02-18 Leetcode > Easy #Leetcode #心得 #String #Math #Bit Manipulation #Simulation
981. Time Based Key-Value Store - Medium 前往題目 之前的文章 想法 Hashmap儲存鍵值對,重點是如何根據timestamp取得同一個或是最相近timestamp的key呢 題目說timestamp和set都是嚴格遞增的,所以不會出現重複的時間戳,那是不是可以組timestamp -> value 思路大致上有兩種做法 使用Pair 使用TreeMap 這裡使用pair,舊的那篇兩個方法都有寫 利用Hashmap儲存k 2024-02-18 Leetcode > Medium #Leetcode #心得 #String #Hash Table #Binary Search #Design
169. Majority Element - Easy 前往題目 之前寫的文章 想法 排序後中間的一定是最多的 或是用hashmap存,然後每次都更新最大值,這樣比排序快一點,因為只要O(n),但空間也需要O(n) 思路這題的關鍵是Boyer–Moore majority vote algorithm(摩爾投票算法),這種人家研究出來發表的算法只能直接死背了,根本不可能自己想出來😂 疊代整個陣列,維護count和candidate 只要coun 2024-02-17 Leetcode > Easy #Leetcode #心得 #Array #Hash Table #Sorting #Divide and Conquer #Counting
236. Lowest Common Ancestor of a Binary Tree - Medium 前往題目 之前寫的文章 想法 用DFS然後每個node回傳之前要判斷並帶值 沒有想出關鍵的判斷部分該怎麼寫 思路 DFS 當找到目標的a或b的時候就+1 這樣搜尋到底然後準備往回的時候就會經過各個可能的ancestor,只要發現該node包含ab就可以直接回傳了 Codeclass Solution { TreeNode res; public TreeNode l 2024-02-17 Leetcode > Medium #Leetcode #心得 #Binary Tree #Depth-First Search #Tree
56. Merge Intervals - Medium 前往題目 之前寫的文章 想法 先sort再用掃描線加入 這次只差條件沒寫好 思路 先照start point由小到大排序,才能讓可以merge的排在一起 接著疊代所有區間,遇到起始點小於等於暫存區間的終點等於有重疊,先merge但還不要加入答案,因為有可能好幾個區間都重疊 Codeclass Solution { public int[][] merge(int[][] i 2024-02-17 Leetcode > Medium #Leetcode #心得 #Array #Sorting