721. Accounts Merge - Medium 前往題目 之前寫的文章,果然這題全忘了😂 想法 名子無法當key,因為可能重複 唯一能辨別不同帳號的就只有兩個帳號都有出現相同的email,但這個email會在第一個嗎,還是有可能在任意位置… 思路 利用union find疊代每一個帳號下的每一個email,如果發現當前帳號的某個email有和另一個帳號的一樣就union 接著把相同account的email組合在一起 最後把組合好的ema 2024-02-24 Leetcode > Medium #Leetcode #心得 #Array #String #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
746. Min Cost Climbing Stairs - Easy 前往題目 思路 從尾端開始,頂端需要0,最後一個台階需要至少本身的cost 倒數第二個台階需要本身的cost,再加上最後一個台階和頂端的最小值 以此類推可以得出: dp[i] = cost[i] + Math.min(dp[i + 1], dp[i + 2]) 需要O(N)空間 其實也可以不用dp陣列,用原本的cost陣列就好,因為要不就是bottom up,要不就是top down,都是一步 2024-02-16 Leetcode > Easy #Leetcode #心得 #Array #Dynamic Programming
1584. Min Cost to Connect All Points - Medium 前往題目 思路有兩種主要做法: prim’s Kruskal’s Prim’s(使用PQ) 循環直到全部的點都走過 在循環裡,每次都從pq取出並查看是否已經走過,否則加入走過的點並把當前weight加入結果 每次都把該點所有的邊(與尚未走過的點)都加入pq 因為一開始起始點是0,保證最小值,接下來加入pq時會自動由小到大排序,所以保證永遠都取到最小的邊 Kruskal’s(使用Union- 2024-02-16 Leetcode > Medium #Leetcode #心得 #Array #Graph #Union Find #Minimum Spanning Tree