[Leetcode解題] 2261. K Divisible Elements Subarrays

26 April 2025

題目

2261. K Divisible Elements Subarrays

給定一個矩陣,跟兩個數字kp,求不相等的subarray並且矩陣內可被p整除的數量不超過k個的數目。


[Leetcode解題] 2563. Count the Number of Fair Pairs

19 April 2025

題目

2563. Count the Number of Fair Pairs

給定一個矩陣,以及上界(upper bound)跟下界(lower bound),找一對數字相加後介於之間,求符合條件之數目。


[Leetcode解題] 92. Reverse Linked List II

21 March 2025

題目

92. Reverse Linked List II 給定一個單向鏈表的頭節點 head,以及兩個整數 leftright,其中 1 <= left <= right <= 鏈表長度。請反轉從位置 leftright 的節點(從 1 開始計數),並返回修改後的鏈表頭節點


[Leetcode解題] 2560. House Robber IV

16 March 2025

2560. House Robber IV


[Leetcode解題] 1894. Find the Student that Will Replace the Chalk

21 February 2025

題目

老師有一盒粉筆,一開始有 $k$ 支,會依照順序讓編號 $0$ 到 $n-1$ 的學生輪流解題,每個學生解一題會消耗不同數量的粉筆(由 chalk 陣列提供)。當某個學生發現粉筆數量不足,這個學生就要去補充粉筆,我們要找出這位學生的索引。


[Leetcode解題] 2364. Count Number of Bad Pairs

9 February 2025

題目

2364. Count Number of Bad Pairs

給定一個矩陣,如果矩陣內有符合以下條件的情況,則為一組bad pairs

j - i != nums[j] - nums[i]

求總共有幾組bad pairs


[Leetcode解題] 845. Longest Mountain in Array

8 February 2025

題目

845. Longest Mountain in Array 一個數列如果滿足 山脈數列 (mountain array)的條件,需要滿足下列條件:

  1. 數列長度至少是 3: arr.length >= 3
  2. 存在一個索引 i (以 0 為基準,0 < i < arr.length - 1),使得:
    • arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
    • arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

現在,給你一個數列 arr,請返回最長山脈子數列的長度。如果沒有山脈子數列,則返回 0


[Leetcode解題] 1400. Construct K Palindrome Strings

11 January 2025

題目

1400. Construct K Palindrome Strings

這題給定一個字串,以及一個數字k,求能不能將字串切成k組,並且各組皆為回文字串


[Leetcode解題] 80. Remove Duplicates from Sorted Array II

4 January 2025

題目

80. Remove Duplicates from Sorted Array II 給定一個按非遞減順序排序的整數陣列 nums,請移除部分重複的元素,使得每個元素最多出現兩次,且元素的相對順序保持不變。 如果移除重複後剩下 k 個元素,則 nums 的前 k 個位置應該包含最終的結果。在 k 之後的部分內容則不重要。 不可以使用額外的陣列空間,必須以 $O(1)$ 的額外記憶體inplace修改輸入陣列。


[Leetcode解題] 1930. Unique Length-3 Palindromic Subsequences

4 January 2025

1930. Unique Length-3 Palindromic Subsequences

題目

1930. Unique Length-3 Palindromic Subsequences

這題給一個字串,我們要求所有長度為3的回文sub-sequence,並且如果重複的話只算一次,求有幾種可能?


[Leetcode解題] 62. Unique Paths

28 December 2024

題目

62. Unique Paths 一個機器人位於 $m \times n$ 的網格的左上角(即 $\text{grid}[0][0]$)。機器人嘗試移動到網格的右下角(即 $\text{grid}[m - 1][n - 1]$)。在任意時刻,機器人只能向下或向右移動。

給定兩個整數 $m$ 和 $n$,返回機器人從左上角移動到右下角的所有唯一路徑的數量。

約束條件
測試數據保證答案小於等於 $2 \times 10^9$。


[Leetcode解題] 1702. Maximum Binary String After Change

28 December 2024

題目

1702. Maximum Binary String After Change

這題給一個binary字串,並有兩種操作可以進行:

  1. 00轉成10
  2. 10轉成01

操作次數不限,問我們可以得到的最大字串為何


[Leetcode解題] 150. Evaluate Reverse Polish Notation

21 December 2024

150. Evaluate Reverse Polish Notation

題目

150. Evaluate Reverse Polish Notation 給你一個以 逆波蘭表示法(Reverse Polish Notation, RPN) 表示的算術運算式,tokens 是一個字串陣列,代表這個算術表達式。請你計算並回傳該運算式的結果,保證結果和中間運算過程中的所有數字都可以用 32 位元整數表示。


[Leetcode解題] 2554. Maximum Number of Integers to Choose From a Range I

6 December 2024

題目

2554. Maximum Number of Integers to Choose From a Range I

給定一個陣列banned,以及兩個正整數n以及maxSum,我們可以從1到n之間挑選盡可能多的正整數,除了banned裡面的正整數不能選以外,而這些被挑選的正整數和不能超過maxSum,問最多能挑選幾個數字。


[Leetcode解題] 2055. Plates Between Candles

6 December 2024

題目

2055. Plates Between Candles

有一張長桌,上面擺了一排盤子和蠟燭。用一個由 '*'(代表盤子)和 '|'(代表蠟燭)組成的字串 s 來描述桌上的擺設。另外會給你一組查詢 queries,裡面每筆查詢是 [left, right],代表要檢查子字串 s[left...right] 之間的盤子數量。

條件是,這些盤子必須同時有蠟燭在左邊和右邊才算數。
比如說:

  • s = "||**||**|*", 查詢 [3, 8] 的子字串是 "*||**|",只有兩個盤子符合條件,因為兩邊都有蠟燭。


[Leetcode解題] 3254. Find the Power of K-Size Subarrays I

2 November 2024

題目

3254. Find the Power of K-Size Subarrays I

這題要求找到長度為 $𝑘$ 的所有子陣列的「power」

陣列的「power」定義為:如果這個子陣列的元素是連續遞增的,則返回其最大元素;否則返回 -1。我們需要遍歷所有長度為 $k$ 的子陣列,並返回一個結果陣列,其中每個元素是對應子陣列的「power」。


[Leetcode解題] 75. Sort Colors

1 November 2024

75. Sort Colors

題目

75. Sort Colors 給定一個長度為 $n$ 的整數陣列 nums,其中每個數字表示一種顏色:0 表示紅色,1 表示白色,2 表示藍色。請將陣列中的顏色進行原地排序,使得相同顏色的物件彼此相鄰,並且排列順序依次為紅色、白色和藍色。

注意:不能使用內建的sort函數來解決此問題。


[Leetcode解題] 50. Pow(x, n)

26 October 2024

題目描述

50. Pow(x, n) 這題要實作一個指數計算函數 pow(x, n),這個函數會計算並回傳 xn 次方,也就是 $x^n$。n 可以是正數、零、或負數,並且 x 可能是小數(例如 2.5)。


[Leetcode解題] 210. Course Schedule II

19 October 2024

題目

210. Course Schedule II 給定一個包含 numCourses 門課程的課程表,課程標號從 0numCourses - 1。同時,還有一個「先修課程」陣列 prerequisites,其中 prerequisites[i] = [a_i, b_i] 表示想要修課程 a_i,需要先修完課程 b_i

例如,[0, 1] 表示要修課程 0 必須先修課程 1

你需要返回一個修課程的順序,若有多種有效順序,返回任意一個。若無法修完所有課程,返回空陣列。


[Leetcode解題] 1302. Deepest Leaves Sum

5 October 2024

題目

1302. Deepest Leaves Sum

這題給定一顆Binary Tree,要求最深的Leaves值的總和

解題思路

這題最直觀的解法是先Traverse一次樹得到最深深度,然後再Traverse一次去計算最深深度的Leaves的總和

但我們也能直接在第一次Traverse的時候就記錄下最深的Leaves,可以直遍歷一次樹

所以我們透過BFS來做,用一個queue來存每個點跟每個點的level,然後去計算每個depth所有點的總和

但如果發現還可以往下的話,就洗掉這個總和,所以它永遠存的是最深的level(depth)點的總和

另外,也能透過多加一個內層迴圈,每次都只對當層來做和,這樣就不用像下面的程式碼存level的值了,大家有興趣可以自己implement看看


[Leetcode解題] 1110. Delete Nodes And Return Forest - DFS解

4 October 2024

題目

1110. Delete Nodes And Return Forest 當你有一棵二元樹,其中每個節點的值都不一樣,我們的目標是刪除一些節點,這些節點的值在一個叫 to_delete 的列表裡。當這些節點被刪除後,樹會被分成幾個不連接的小樹,這些小樹被稱為森林。你需要返回這些小樹的根節點,順序沒有關係。


[Leetcode解題] 641. Design Circular Deque

28 September 2024

題目

641. Design Circular Deque

這題應該就是要我們設計一個deque,注意每個operation都要是 $O(1)$


[Leetcode解題] 381. Insert Delete GetRandom O(1) - Duplicates allowed

27 September 2024

381. Insert Delete GetRandom O(1) - Duplicates allowed

題目描述

381. Insert Delete GetRandom O(1) - Duplicates allowed RandomizedCollection 是一個支援重複元素(multiset)的數據結構,需要支援以下三種操作:

  1. bool insert(int val):將元素 val 插入到集合中,即使該元素已存在。返回值為 true 當該元素之前不在集合中,否則返回 false
  2. bool remove(int val):從集合中移除一個 val,如果 val 存在,則返回 true,否則返回 false。如果有多個相同元素,只移除其中一個。
  3. int getRandom():隨機返回集合中的一個元素。每個元素被返回的機率應與它在集合中的出現次數成正比。

要求所有操作在平均 $O(1)$ 的時間複雜度內完成。


[Leetcode解題] 2419. Longest Subarray With Maximum Bitwise AND

14 September 2024

題目

2419. Longest Subarray With Maximum Bitwise AND

給定一個大小為 n 的整數數組 nums。

考慮 nums 中一個非空的子數組,其按位與(bitwise AND)的值是可能的最大值。

換句話說,設 k 為任意子數組的最大按位與值,然後只考慮按位與等於 k 的子數組。返回這樣的子數組中最長的長度。

數組的按位與是數組中所有數的按位與操作結果。

子數組是數組中連續的元素序列。


[Leetcode解題] 841. Keys and Rooms

7 September 2024

題目

841. Keys and Rooms

有 n 個房間,標號從 0 到 n-1,除了房間 0 之外,所有房間都被鎖住。你的目標是訪問所有房間,但沒有鑰匙你無法進入被鎖的房間。

當你訪問一個房間時,可能會找到一組不同的鑰匙,每把鑰匙上都有一個數字,表示它可以打開的房間,你可以帶上所有鑰匙去打開其他房間。

給定一個數組 rooms,其中 rooms[i] 表示訪問房間 i 時可以獲得的鑰匙集合,如果你能訪問所有房間,返回 true,否則返回 false。


[Leetcode解題] 380. Insert Delete GetRandom O(1)

6 September 2024

題目

380. Insert Delete GetRandom O(1) 實作一個 RandomizedSet 類別,這個類別需要支援以下操作:

  1. RandomizedSet():初始化一個空的 RandomizedSet 物件。
  2. bool insert(int val):如果 val 不存在於集合中,插入 val 並回傳 true;否則回傳 false
  3. bool remove(int val):如果 val 存在於集合中,移除 val 並回傳 true;否則回傳 false
  4. int getRandom():隨機回傳集合中的一個元素(保證至少有一個元素存在)。每個元素被選中的機率應該相同。

要求每個操作的平均時間複雜度為 $O(1)$。


[Leetcode解題] 1514. Path with Maximum Probability

3 September 2024

題目

1514. Path with Maximum Probability

給定一個無向圖,圖的每條Edge上表示一個機率,求從起始點到終點經過,有最大機率的那條路徑,若不存在則回傳0。


[Leetcode解題] 1105. Filling Bookcase Shelves

30 August 2024

題目描述

1105. Filling Bookcase Shelves 給定一個二維陣列 books,其中 books[i] = [thicknessi, heighti] 表示第 i 本書的厚度和高度。還給定一個整數 shelfWidth,表示書架每層的最大寬度。

我們要按照書的順序,依次把書放在書架上。每一層的書總厚度不能超過 shelfWidth,而這一層的高度就是放上去的書裡面最高的那本書的高度。我們需要重複這個過程直到所有書都放好,目標是讓書架的總高度最小。


[Leetcode解題] 3169. Count Days Without Meetings

24 August 2024

題目

3169. Count Days Without Meetings

給你一個正整數 days,表示員工可以工作的總天數(從第 1 天開始)。你還得到一個大小為 n 的二維數組 meetings,其中 meetings[i] = [start_i, end_i] 表示第 i 次會議的開始和結束天數(包括起止天)。

返回員工可以工作但沒有安排會議的天數。

注意:會議可能會重疊。


[Leetcode解題] 1004. Max Consecutive Ones III

24 August 2024

題目描述

1004. Max Consecutive Ones III 假設有一個由0和1組成的二進位陣列nums,還有一個整數k。你可以把陣列中的最多k0翻轉成1。請問這樣做之後,陣列中可以得到的連續1的最大長度是多少?


[Leetcode解題] 959. Regions Cut By Slashes 以DFS解

10 August 2024

題目

959. Regions Cut By Slashes

一個 n x n 的網格由 1 x 1 的方格組成,每個方格內包含 ‘/’, ‘\’ 或空格 ‘ ‘,這些字符將方格劃分為連續的區域。給定表示為字符串數組的網格 grid,返回區域的數量。


[Leetcode解題] 31. Next Permutation

9 August 2024

題目

31. Next Permutation 題目要求是找到一個整數陣列的下一個字典序排列。如果已經是最大排列,那麼就返回最小排列(即升序排列)。這個功能要求只使用常數額外記憶體。


[Leetcode解題] 3143. Maximum Points Inside the Square

3 August 2024

題目

3143. Maximum Points Inside the Square

給定一個二維陣列 points 和一個字符串 s,其中 points[i] 表示第 i 個點的坐標,s[i] 表示第 i 個點的標籤。

一個有效的正方形必須以原點 (0, 0) 為中心,邊與軸平行,且不能包含兩個標籤相同的點。

返回一個有效的正方形內最多可以包含的點數。

如果一個點位於正方形的邊界上或內部,則認為該點在正方形內。正方形的邊長可以為零。


[Leetcode解題] 133. Clone Graph - 使用 DFS 解

2 August 2024

133. Clone Graph

題目描述

133. Clone Graph 給定一個連通無向圖中的一個節點的引用。請返回這個圖的深拷貝(克隆)。

每個節點包含一個整數值和一個鄰居列表(List[Node])。

節點的定義如下:

class Node:
    def __init__(self, val=0, neighbors=[]):
        self.val = val
        self.neighbors = neighbors


[Leetcode解題] 1143. Longest Common Subsequence - 使用 Rolling DP 指針解

26 July 2024

題目

1143. Longest Common Subsequence 給定兩個字串 text1text2,返回它們的最長共同子序列的長度。如果沒有共同的子序列,返回 0。


[Leetcode解題] 1605. Find Valid Matrix Given Row and Column Sums - 使用Greedy+雙指針解

20 July 2024

題目

1605. Find Valid Matrix Given Row and Column Sums

給定兩個非負整數數組rowSumcolSumrowSum[i]表示第 i 行所有元素的和,而 colSum[j] 表示第 j 列所有元素的和。求任意一個滿足rowSumcolSum要求的非負整數矩陣,其大小為 rowSum.length x colSum.length


[Leetcode解題] 986. Interval List Intersections - 雙指針解

12 July 2024

題目:求兩個區間列表的交集

986. Interval List Intersections 給定兩個封閉區間的列表 firstListsecondList,其中 firstList[i] = [starti, endi]secondList[j] = [startj, endj]。這些區間都是兩兩不相交的,並且按排序順序排列。

返回這兩個區間列表的交集。

一個封閉區間 [a, b](其中 a <= b)表示實數 x 的集合,使得 a <= x <= b

兩個封閉區間的交集是一組實數,要麼為空,要麼表示為一個封閉區間。例如,[1, 3][2, 4] 的交集是 [2, 3]


[Leetcode解題] 187. Repeated DNA Sequences - 使用hashtable解+4進位

30 June 2024

題目

187. Repeated DNA Sequences

給定一個字串,回傳重複出現一次以上並且長度為十的子字串。


[Leetcode解題] 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit - 使用deque+ two pointer解

29 June 2024

題目

1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit 給定一個整數數組 nums 和一個整數 limit,請返回長度最大的非空子陣列的長度,使得該子陣列中任何兩個元素之間的絕對差不超過 limit


[Leetcode解題] 1248. Count Number of Nice Subarrays - 使用presum+hashtable解

22 June 2024

題目

1248. Count Number of Nice Subarrays

給定一個整數矩陣nums和一個整數k。如果一個連續子陣列包含恰好k個奇數元素,則稱其為漂亮子陣列nice sub-arrays。求全部漂亮子陣列的數量。


[Leetcode解題] 1482. Minimum Number of Days to Make m Bouquets - binary-search解

21 June 2024

題目

1482. Minimum Number of Days to Make m Bouquets 你有一個整數陣列 bloomDay,以及兩個整數 mk。你希望製作 m 束花,每束花需要 k 朵相鄰的花。

花園裡有 n 朵花,第 i 朵花在 bloomDay[i] 這一天綻放,然後可以用來製作一束花。

我們需要找到能夠製作 m 束花的最少天數。如果無法製作出 m 束花,返回 -1。

輸入說明

  • bloomDay: 整數陣列,代表每朵花綻放的日子。
  • m: 需要製作的花束數量。
  • k: 每束花需要的相鄰花朵數量。

輸出說明

返回能夠製作 m 束花的最少天數,如果無法製作出 m 束花,返回 -1。


[Leetcode解題] 979. Distribute Coins in Binary Tree

18 May 2024

題目

979. Distribute Coins in Binary Tree

給一棵二元樹,上面每個點可能會有硬幣,但所有硬幣總和的數量跟節點的數量一樣,求最小要移動幾步才能讓每個點剛好有一個硬幣。


[Leetcode解題] 523. Continuous Subarray Sum

18 May 2024

題目

523. Continuous Subarray Sum

給一個矩陣看是否包含長度大於1的子矩陣的和可以被給定的k給整除。

矩陣內的數字皆為正整數。


[Leetcode解題] 1423. Maximum Points You Can Obtain from Cards

18 May 2024

題目

1423. Maximum Points You Can Obtain from Cards

有幾張卡片排成一列,每張卡片都有一個對應的點數。這些點數存放在 cardPoints 中。每一步,你可以從這列卡片的開頭或結尾拿走一張卡片,必須恰好拿走 k 張卡片。你的得分是你拿走的卡片點數的總和。

給定 cardPoints 和整數 k,返回你可以獲得的最大得分。


[Leetcode解題] 402. Remove K Digits

10 May 2024

題目

402. Remove K Digits 給定一個表示非負整數的字符串 num 和一個整數 k,從 num 中移除 k 個數字後,返回可能的最小整數。


[Leetcode解題] 2034. Stock Price Fluctuation

3 May 2024

題目:

2034. Stock Price Fluctuation 你會拿到一堆股票價格的記錄,每個記錄包含一個時間戳記和對應的股價。不幸的是,這些記錄不是按照順序來的。更糟糕的是,有些記錄可能是錯誤的。之後可能會有一條相同時間戳記的記錄出現在流中,用來更正之前錯誤的記錄價格。

你需要設計一個算法:

  1. 更新特定時間的股票價格,從之前的任何記錄中更正該時間的價格。
  2. 基於當前記錄找到股票的最新價格。最新價格是記錄的最新時間的價格。
  3. 找到股票在當前記錄中的最高價格。
  4. 找到股票在當前記錄中的最低價格。

實現 StockPrice 類:

  • StockPrice(): 初始化沒有價格記錄的對象。
  • void update(int timestamp, int price): 更新給定時間戳的股票價格。
  • int current(): 返回股票的最新價格。
  • int maximum(): 返回股票的最高價格。
  • int minimum(): 返回股票的最低價格。


[Leetcode解題] 394. Decode String - 用stack解

20 April 2024

題目

394. Decode String

給定一個字串,中括號外一定是數字,表示括號內的字串重複幾次。

舉例來說,3[acf],表示acf要重複3次acfacfacf


[Leetcode解題] 1146. Snapshot Array

20 April 2024

題目

1146. Snapshot Array 你需要實作一個 SnapshotArray 資料結構,支援以下介面:

  1. SnapshotArray(length): 初始化一個長度為指定長度的類似陣列結構。最初,每個元素都是0。
  2. set(index, val): 設置給定索引index的元素為 val
  3. snap(): 拍攝陣列的快照並返回快照 ID,即我們呼叫 snap() 的總次數減去1。
  4. get(index, snap_id): 返回在給定快照 ID 時給定index的值。


[Leetcode解題] 309. Best Time to Buy and Sell Stock with Cooldown

23 March 2024

309. Best Time to Buy and Sell Stock with Cooldown

題目

309. Best Time to Buy and Sell Stock with Cooldown

想像你在買賣股票,給定一個股票價格的序列表示每天的股價,每次可以選擇買或是賣,如果賣出的時候,會有一天的cooldown不能買,每次只能持有一個股票。


[Leetcode解題] 139. Word Break - 使用dp解

23 March 2024

題目

139. Word Break

給一個字串以及一個詞表(一個包含單詞的矩陣),求該字串是否能被以詞表內的單字切分,單字可以被重複利用。


[Leetcode解題] 368. Largest Divisible Subset - 使用dp 算法

3 March 2024

題目

368. Largest Divisible Subset 給定一組不同的正整數 nums,返回最大的子集 answer,使得該子集中的每對元素 $(answer[i], answer[j])$ 都滿足以下條件: $answer[i] \% answer[j] == 0$,或者 $answer[j] \% answer[i] == 0$

如果有多個解,返回其中任意一個。


[Leetcode解題] 189. Rotate Array

23 February 2024

題目

189. Rotate Array

給一個矩陣nums以及一個數字k,將矩陣元素往右移動k,舉例來說,如果給[1,2,3,4,5,6,7], k=3,所有元素往右三格即得[5,6,7,1,2,3,4]

題目要求要在$O(1)$的空間複雜度下解。


[Leetcode解題] 199. Binary Tree Right Side View - BFS解

18 February 2024

題目

199. Binary Tree Right Side View 給定一棵二元樹的根節點,想像自己站在樹的右側,然後要返回你能看到的節點值,並且按照從上到下的順序排列。


[Leetcode解題] 200. Number of Islands - DFS解

3 February 2024

題目

200. Number of Islands

給定一個m x n的2D二進制網格grid,代表一張地圖,其中’1’代表陸地,’0’代表水域。請計算並返回地圖上的島嶼數量。

島嶼是由水域包圍並由相鄰的陸地水平或垂直連接形成的。請注意,網格的四個邊緣都被水域包圍。


[Leetcode解題] 438. Find All Anagrams in a String

6 January 2024

題目

438. Find All Anagrams in a String

給定兩個字串s1s2,判斷s2中是否包含s1其中一種排列組合的子字串,回傳各個位置的indices


[Leetcode解題] 416. Partition Equal Subset Sum

6 January 2024

題目

416. Partition Equal Subset Sum

給定一個矩陣,判定是否能將此矩陣分開成兩個子集(subsets),並且兩個子集的和相等。


[Leetcode解題] 146. LRU Cache

6 January 2024

題目

146. LRU Cache 設計一個資料結構,符合最近最少使用 (LRU) cache的限制。實作 LRUCache 類別,包含以下方法:

  • LRUCache(int capacity):初始化一個具有正數容量的 LRU cache。
  • int get(int key):如果key存在,返回相對應的value,否則返回 -1。
  • void put(int key, int value):如果key存在,更新相對應的value。否則,將key-value添加到cache中。如果使key的數量超過capacity,則淘汰最近最少使用的key。

get 和 put 方法的平均時間複雜度應為 O(1)。


[Leetcode解題] 567. Premutation in String

23 December 2023

題目

567. Premutation in String

給定兩個字串s1s2,判斷s2中是否包含s1其中一種排列組合的子字串


[Leetcode解題] K Closest Points to Origin - Quick Select解

22 December 2023

題目

973. K Closest Points to Origin 給定一個points陣列,其中 $points[i] = [x_i, y_i]$ 代表 $XY$ 平面上的一個點,以及一個整數 k,請返回距離原點 $(0, 0)$ 最近的前 $k$ 個點。

  • 兩點之間的距離: 使用歐幾里得距離($\sqrt{(x1 - x2)^2 + (y1 - y2)^2}$)。
  • 可以以任何順序返回答案,且答案保證是唯一的(除了順序不同)。


[Leetcode解題] Minimum Add to Make Parentheses Valid - stack解

17 December 2023

題目

921. Minimum Add to Make Parentheses Valid

給定一個括號字串s,一次操作可以在字串的任何位置插入一個括號。請計算使字符串有效的最小操作次數。 有效括號字串的定義如下:

  • 它是空字串,
  • 它可以寫成AB(A與B連接),其中A和B都是有效字符串,或者
  • 它可以寫成(A),其中A是有效字符串。


[Leetcode解題] Simplify Path - stack解

9 December 2023

題目

71. Simplify Path

這是一個處理 Unix-style 文件系統中給定絕對路徑的問題。我們需要將給定的路徑轉換為簡化的規範路徑。在 Unix-style 文件系統中,. 代表當前目錄,.. 代表上一級目錄,連續的多個斜線 / 被視為單一的斜線 /。這個問題的目標是返回簡化的規範路徑,滿足一些特定的格式要求。


[Leetcode解題] 739. Daily Temperatures - 單調佇列(monotonic stack)解

24 November 2023

題目

739. Daily Temperatures

這題給定一個一維矩陣表示溫度,題目要求,最少要過幾天後會有更高的溫度,如果沒有的話,就填0


[Leetcode解題] 227. Basic Calculator II - stack解

24 November 2023

題目:

227. Basic Calculator II

給定一個字符串s,表示一個表達式,請求解這個表達式的值。

  • 整數除法應該向零而不是向無限小截斷。
  • 你可以假設給定的表達式始終是有效的。所有中間結果都將在範圍$[-2^{31}, 2^{31}-1]$內。
  • 注意:不允許使用任何內置函數來評估字符串作為數學表達式,如eval()。


[Leetcode解題] 994. rotted oranges - BFS

17 November 2023

題目

994. rotted oranges

這題題目給定一個二維矩陣,矩陣中每個值代表一顆橘子的狀態,橘子的狀態可能有三種,可能為腐爛(2), 新鮮(1), 空(0),如果空代表該格沒有橘子。

每過一秒,腐爛的橘子會讓其上下左右的橘子也變腐爛,題目問過幾秒後,所有橘子都會腐爛,如果沒辦法使所有橘子腐爛,則回傳-1


[Leetcode解題] Kth Largest Element in an Array - 最小堆(Min Heap)& Quick Select 解

21 October 2023

題目

215. Kth Largest Element in an Array

給定一個整數陣列 nums 和一個整數 k,請找出陣列中第 k 大的元素。請注意,這裡指的是陣列按照升序排序後的第 k 大元素,而非第 k 個不同的元素。我們可以不使用sort解決這個問題嗎?

Example 1:

Input: nums = [3,2,1,5,6,4], k = 2
Output: 5

Example 2:

Input: nums = [3,2,3,1,2,4,5,5,6], k = 4
Output: 4


[Leetcode解題] Maximal Network Rank - 圖算法

21 October 2023

題目

1615. Maximal Network Rank 給定$n$個城市,每個城市之間可以連結道路,給定一個陣列$roads$描述任兩城市之間的道路,求最大的network rank為何?


[Leetcode解題] 1319. Number of Operations to Make Network Connected - DisjointSet解法

21 October 2023

題目

1319. Number of Operations to Make Network Connected 連接所有計算機的最少操作次數

給定$n$台計算機,編號從$0$到$n-1$,它們之間通過以太網電纜相互連接,形成一個網絡。給定初始的連接配置connections,其中connections[i] = [ai, bi]表示計算機aibi之間有一條連接。任何一台計算機都可以通過網絡直接或間接地連接到任何其他計算機。

你可以提取某些已經連接的電纜,將它們連接到任意一對未連接的計算機上,使它們直接連接起來。

請計算出需要執行的最小操作次數,使得所有計算機都能連接在一起。如果無法實現,請返回$-1$。


[Leetcode解題] Minimum Size Subarray Sum - Presum + 前後指針解法

7 July 2023

題目

209. Minimum Size Subarray Sum 這題給定一個正整數陣列,以及一個正整數target,要求陣列中最短的子陣列和大於或等於target


[Leetcode解題] Satisfiability of Equality Equations - 使用DisjoinSet算法

9 June 2023

題目

990. Satisfiability of Equality Equations 給定一個字串序列 $equations$,表示變量之間的關係。每個字串 equations[i] 的長度為4,有兩種不同的形式:"xi==yi""xi!=yi"。其中,$x_i$ 和 $y_i$ 是小寫字母(可以相同),表示單個字母的變量名。

如果能夠對變量名分配整數,使得滿足所有給定的等式關係,則返回 $true$;否則返回 $false$。


[Leetcode解題] Detonate the Maximum Bombs - 使用圖算法

3 June 2023

題目

2101. Detonate the Maximum Bombs 給定一個列表,列表中的每個元素有三個組成元素,$(x, y, r)$表示圓中心點的位置,以及其半徑$r$,每個點表示一顆炸彈,圓的面積表示炸彈可以炸的範圍,爆炸時會引爆其他炸彈,題目要求,若只能引爆一顆炸彈,最多可以引爆幾顆炸彈。


[Leetcode解題] Uncrossed Lines - DP + scrolling array解

3 June 2023

題目

1035. Uncrossed Lines 給定兩個整數列表 $nums1$ 和 $nums2$,我們將列表 $nums1$ 和 $nums2$ 中的整數(按照給定順序)分別寫在兩條水平線上。

我們可以繪製連接線:一條直線連接兩個數字 nums1[i]nums2[j],滿足以下條件:


[Leetcode解題] Longest Valid Parentheses - Stack解

26 May 2023

題目

32. Longest Valid Parentheses 最長有效括號子字串長度。


[Leetcode解題] Course Schedule - 使用DFS解法

26 May 2023

題目

207.

這題我們給定一個序列,序列中的元素為課程編號以及其先修課程,舉例來說[$a_i$, $b_i$]代表我們必須先修過$b_i$才能選修$a_i$。另外會給定課程總數$numCourses$,課程的編號從$0$至$numCourses-1$,而題目要求我們是否能夠完成全部課程。


[Leetcode解題] Validate Binary Search Tree - 遞迴解

20 May 2023

題目

98. Validate Binary Search Tree 這題我們要驗證給定的樹是否為一個合法的二元搜尋樹(Binary Search Tree),一個合法的BTS需要符合以下幾點:

  1. 所有左子樹的節點都必須小於根節點(root)
  2. 所有右子樹的節點都必須大於根節點
  3. 左子樹跟右子樹也要是二元搜尋樹


[Leetcode解題] Best Team With No Conflicts - dp解

20 May 2023

題目

1626. Best Team With No Conflicts 給定兩個列表scores和ages,其中scores[i]和ages[i]分別表示第i個球員的得分和年齡。球隊的得分是所有球員得分的總和。但球隊有一個限制:年齡較小的球員的得分不能嚴格高於年齡較大的球員。同齡球員之間不會存在衝突。請找出所有可能的籃球隊中的最高總分。


[Leetcode解題] 3Sum - 前後指針解

26 November 2022

題目

15. 3Sum


[Leetcode解題] Subarray Sum Equals K - presum解

4 November 2022

題目

560. Subarray Sum Equals K 給定一個整數陣列 nums 和一個整數 k,返回總和等於 k 的子陣列的總數。 子陣列是陣列中元素的連續非空序列。


[Leetcode解題] Word Search - bfs/dfs解

11 February 2022

題目

79. Word Search

解題思路

這題我們很直接會想要用BFS/DFS的解法來解,以每個點為起點去做搜尋,這樣時間複雜度為$O(M N 3^L)$,$M, N$為棋盤的長寬,$L$為搜尋字串的長度,最差的情況來說,我們需要走訪$M \times N$個點作為起點,每個點又需要走過$L$個點做探索,每個位置可以往上下左右走,所以最壞有$4*3^{L-1}$種可能。


[Leetcode解題] Subsets - dfs解

11 February 2022

題目

78. Subsets 這是一道關於「子集」的題目。給定一個整數數組 nums,其中所有元素均為唯一的,請返回所有可能的「子集」(即集合的幂集)。 解決方案集不得包含重複的子集。您可以以任意順序返回解決方案。


[Leetcode解題] Best Time to Buy and Sell Stock with Transaction Fee - greedy解

11 February 2022

題目

714. Best Time to Buy and Sell Stock with Transaction Fee 給定一個數組prices,其中prices[i]表示第i天的股票價格,以及一個代表交易費用的整數fee。

找到您可以實現的最大利潤。您可以進行任意多次交易,但每次交易都需要支付交易費用。

注意:您不能同時進行多個交易(即,在買入股票之前必須先將其出售)。


[Leetcode解題] Merge Intervals - greedy解

11 February 2022

題目

56. Merge Intervals 給定一個區間陣列intervals(List[List[int]]),其中 intervals[i] = [start_i, end_i],合併所有重疊區間,並返回覆蓋輸入中所有區間的非重疊區間陣列。


[Leetcode解題] Maximum Subarray - presum解

11 February 2022

題目

53. Maximum Subarray 給定一個整數陣列nums,找到子陣列其總和最大並返回其總和。


[Leetcode解題] Permutations - 遞迴/backtrace解

11 February 2022

題目

46. Permutations 這是一個數組的排列組合題。給定一個元素獨一無二的數組,求出所有可能的排列。


[Leetcode解題] Combination Sum - 遞迴/backtrace解

11 February 2022

題目

39. Combination Sum

題目

給定一個不同整數的候選人陣列和目標整數目標,返回所有選定的數字的總和為目標的候選人的所有唯一組合的列表。您可以以任意順序返回組合。


[Leetcode解題] Valid Sudoku - 迴圈解

11 February 2022

題目

36. Valid Sudoku


[Leetcode解題] Longest Increasing Subsequence - dp解

11 February 2022

題目

300. Longest Increasing Subsequence


[Leetcode解題] Longest Substring Without Repeating Characters - 用暴力法、DP法和前後指針解決

11 February 2022

題目

3. Longest Substring Without Repeating Characters


[Leetcode解題] Bulls and Cows - 暴力解

11 February 2022

題目

299. Bulls and Cows

這是一個”Bulls and Cows”遊戲,你和你的朋友玩。你先寫下一個秘密數字,然後讓你的朋友猜數字。當你的朋友猜時,你會提供一個提示,內容包括:

猜對的數字數量,這些數字在猜測中的位置正確。

猜錯的數字數量,這些數字在秘密數字中,但位置不正確。特別的是,猜測中的非公牛數(B)字可以重新排列,以使它們成為公牛(A)。

給定秘密數字secret和朋友的猜測guess,返回朋友的猜測的提示。提示應格式化為”xAyB”,其中x是公牛的數量,y是牛的數量。

特別要注意的是,secret和guess都可能包含重複的數字。


[Leetcode解題] Generate Parentheses - Backtrace解

11 February 2022

題目

22. Generate Parentheses


[Leetcode解題] Letter Combinations of a Phone Number - 遞迴解

11 February 2022

題目

17. Letter Combinations of a Phone Number


[Leetcode解題] Longest Common Prefix - 暴力解

11 February 2022

題目

14. Longest Common Prefix


[Leetcode解題] Flatten Binary Tree to Linked List - 遍歷二叉樹

11 February 2022

題目

114. Flatten Binary Tree to Linked List

給一個二叉樹的root,將樹壓平成一個linked list。 這個linked list應該與二叉樹的前序遍歷順序相同。


[Leetcode解題] Container With Most Water - 使用前後指針解

11 February 2022

題目

11. Container With Most Water 給定一個長度為 $n$ 的整數數組 $height$,在平面直角坐標系上有 $n$ 條垂直線,其中第 $i$ 條線的兩端點分別為 $(i, 0)$ 和 $(i, height[i])$。 找到兩條線,與 $x$ 軸一起形成一個容器,使得該容器包含最多的水。 返回容器可以存儲的最大水量。