CS:APP 電腦系統:程式設計師的角度 第一章筆記 這是來自卡內基梅隆大學的優質課程,對底層系統的理解越深,對程式設計師來說只有百利而無一害。雖然一時半刻看不到有什麼成效,但未來的某些日子一定會覺得當初學了這些真是太好了 電腦名詞譯名 首先從hello world開始以C語言來說,讓寫好的以下程式碼執行,需要經過如下步驟 #include <stdio.h> int main() { printf("hello, worl 2024-02-14 電腦科學 > Computer Systems - A Programmer's Perspective #Computer System
130. Surrounded Regions - Medium 前往題目 想法 用DFS看每個島嶼在哪,然後翻轉,但是要注意外圈的O會使得比鄰的O不能被反轉,這部分不知道怎麼做,得另外再搜尋哪些有比鄰 思路 用BFS從border開始更好理解 從外圈開始遇到O就BFS搜尋比鄰它的O,感染的概念,一個接著一個感染,並先標記為# 最後搜尋完了之後再疊代整個board,遇到O就是沒有比鄰的,直接翻轉為X,遇到#就是比鄰的O,翻轉回O Code文字解析 cl 2024-02-14 Leetcode > Medium #Leetcode #心得 #Array #Depth-First Search #Matrix #Breadth-First Search #Union Find
695. Max Area of Island - Medium 前往題目 想法 和之前寫過的島嶼類似,但忘了怎麼開頭,只知道DFS會輕鬆一些 思路 利用DFS 從第一個cell開始,遇到水就跳過,遇到走過的cell也跳過,出界的也跳過 把每個區域的1都走過然後加起來,因為dfs遇到出界或是海水就會回傳,所以最終每個區域的面積都可以被單獨算出來,因為演算法不會越過水到另一片陸地。 Code class Solution { privat 2024-02-13 Leetcode > Medium #Leetcode #心得 #Array #Depth-First Search #Matrix #Breadth-First Search #Union Find
131. Palindrome Partitioning - Medium 前往題目 想法 backtracking把所有組合都看過,每次要判斷是否是palindrome然後才加入 思路 平常的backtrack 要紀錄起始點,然後每個循環都要判斷是否為palindrome Codeclass Solution { List<List<String>> res = new LinkedList<>(); LinkedLis 2024-02-13 Leetcode > Medium #Leetcode #心得 #String #Dynamic Programming #Backtracking
40. Combination Sum II - Medium 前往題目 想法 和今天稍早寫的另一題(90)一樣的套路 思路 先sort,這樣才好跳過取過的數字 正常backtrack 唯一需要注意的是追蹤index,如果循環中的index已經比傳入的index還大的時候就要判斷是否和前一個數字一樣,要跳過,代表前一個已經被取過了 這題很妙的是和第90一樣的做法,但90是不能取同一個subset即便順序不同,這個是不能取到取過的數字 總之這個技巧的核心就 2024-02-12 Leetcode > Medium #Leetcode #心得 #Array #Backtracking
90. Subsets II - Medium 前往題目 想法 以為是簡單的backtrack,但是需要考慮如何防止加入重複的subset 思路 先sort,這樣才好判斷相同的數字 正常backtrack 唯一需要注意的是追蹤index,如果循環中的index已經比傳入的index還大的時候就要判斷是否和前一個數字一樣,要跳過 判斷的邏輯很妙,尤其是i > idx,後來想了想應該是i == idx的時候不用判斷,因為還沒加入,加入後 2024-02-12 Leetcode > Medium #Leetcode #心得 #Array #Bit Manipulation #Backtracking
46. Permutations - Medium 前往題目 想法 之前做過的簡單backtracking 思路 backtracking check是否數字已存在,以免重複加入 暫存的list可能可以用其他實作方式,可以removeLast in O(1),不然arraylist要移除最後一項需要N次操作 Codeclass Solution { List<List<Integer>> res; pub 2024-02-11 Leetcode > Medium #Leetcode #心得 #Array #Backtracking
33. Search in Rotated Sorted Array - Medium 前往題目 想法 之前寫過,條件實在不好想 思路 Binary search整個nums 如果mid不是答案,看左指針的值是否小於等於mid的值,代表順序正常,再接著判斷,是否左邊的portion被rotate到右邊了 如果都不是那判斷右邊portion是否被rotate到左邊去了,並移動指針 這次第二次做,覺得可以思考的方向是: mid和l指針的值正常的情況(l <= mid)如何判斷 2024-02-11 Leetcode > Medium #Leetcode #心得 #Array #Binary Search
39. Combination Sum - Medium 前往題目 想法 之前寫過,要用backtracking,試試這次能不能自己寫出來 思路就差臨門一腳,沒注意到index需要被pass,不然每次都會從0開始,結果雖然都是對的但會有重複項 backtracking 疊代所有數字,每次都傳新的sum以及當前index,如果如果sum等於target就加入,大於就直接return 每次循環結束前都要移除最後一項,因為已經檢查過了 Codeclas 2024-02-10 Leetcode > Medium #Leetcode #心得 #Array #Backtracking
355. Design Twitter - Medium 前往題目 想法 卡在getNewsFeed 思路OOD方式 定義Tweet物件和User物件,包含各種訊息 postTweet直接用id取得用戶物件然後post getNewsFeed一開始先檢查userId是否存在,接著疊代該用戶追蹤的用戶們,取得他們最新的tweet,然後第二個循環就開始取得10個最新tweet,先加入最新的tweet,然後同時也加入該tweet的下一個,這樣一直循環直到 2024-02-10 Leetcode > Medium #Leetcode #心得 #Hash Table #Linked List #Heap (Priority Queue) #Design