2024年10月1日
【leetcode】287. 尋找重複數
題意:
給定一個包含
n + 1
個整數的陣列nums
,其數字都在[1, n]
範圍內(包括1
和n
),可知至少存在一個重複的整數。假設
nums
只有 一個重複的整數 ,返回 這個重複的數 。你設計的解決方案必須 不修改 陣列
nums
且只用常量級O(1)
的額外空間。
2024年10月2日
【leetcode】763. 劃分字母區間
題意:
給你一個字串
s
。我們要把這個字串劃分為儘可能多的片段,同一字母最多出現在一個片段中。注意,劃分結果需要滿足:將所有劃分結果按順序連線,得到的字串仍然是
s
。返回一個表示每個字串片段的長度的列表。
【leetcode】152. 乘積最大子陣列
題意:
給你一個字串
s
。我們要把這個字串劃分為儘可能多的片段,同一字母最多出現在一個片段中。注意,劃分結果需要滿足:將所有劃分結果按順序連線,得到的字串仍然是
s
。返回一個表示每個字串片段的長度的列表。
2024年10月3日
【leetcode】416. 分割等和子集
題意:
給你一個 只包含正整數 的 非空 陣列
nums
。請你判斷是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。
【leetcode】32. 最長有效括號
題意:
給你一個只包含
'('
和')'
的字串,找出最長有效(格式正確且連續)括號子串的長度。
2024年10月4日
【leetcode】295. 資料流的中位數
題意:
中位數是有序整數列表中的中間值。如果列表的大小是偶數,則沒有中間值,中位數是兩個中間值的平均值。
- 例如
arr = [2,3,4]
的中位數是3
。- 例如
arr = [2,3]
的中位數是(2 + 3) / 2 = 2.5
。實現 MedianFinder 類:
MedianFinder()
初始化MedianFinder
物件。void addNum(int num)
將資料流中的整數num
新增到資料結構中。double findMedian()
返回到目前為止所有元素的中位數。與實際答案相差10-5
以內的答案將被接受。
2024年10月6日
【leetcode】134. 加油站
題意:
在一條環路上有
n
個加油站,其中第i
個加油站有汽油gas[i]
升。你有一輛油箱容量無限的的汽車,從第
i
個加油站開往第i+1
個加油站需要消耗汽油cost[i]
升。你從其中的一個加油站出發,開始時油箱為空。給定兩個整數陣列
gas
和cost
,如果你可以按順序繞環路行駛一週,則返回出發時加油站的編號,否則返回-1
。如果存在解,則 保證 它是 唯一 的。
2024年10月7日
【leetcode】871. 最低加油次數
題意:
汽車從起點出發駛向目的地,該目的地位於出發位置東面
target
英里處。沿途有加油站,用陣列
stations
表示。其中stations[i] = [position_i, fuel_i]
表示第i
個加油站位於出發位置東面position_i
英里處,並且有fuel_i
升汽油。假設汽車油箱的容量是無限的,其中最初有
startFuel
升燃料。它每行駛 1 英里就會用掉 1 升汽油。當汽車到達加油站時,它可能停下來加油,將所有汽油從加油站轉移到汽車中。為了到達目的地,汽車所必要的最低加油次數是多少?如果無法到達目的地,則返回
-1
。注意:如果汽車到達加油站時剩餘燃料為
0
,它仍然可以在那裡加油。如果汽車到達目的地時剩餘燃料為0
,仍然認為它已經到達目的地。
2024年10月8日
【leetcode】1436. 旅行終點站
題意:
給你一份旅遊線路圖,該線路圖中的旅行線路用陣列
paths
表示,其中paths[i] = [cityAi, cityBi]
表示該線路將會從cityAi
直接前往cityBi
。請你找出這次旅行的終點站,即沒有任何可以通往其他城市的線路的城市。題目資料保證線路圖會形成一條不存在迴圈的線路,因此恰有一個旅行終點站。
2024年10月10日
【leetcode】3162. 優質數對的總數 I
題意:
給你兩個整數陣列
nums1
和nums2
,長度分別為n
和m
。同時給你一個正整數k
。如果
nums1[i]
可以被nums2[j] * k
整除,則稱數對(i, j)
為 優質數對(0 <= i <= n - 1
,0 <= j <= m - 1
)。返回 優質數對 的總數。
2024年10月11日
【leetcode】3164. 優質數對的總數 II
題意:
給你兩個整數陣列
nums1
和nums2
,長度分別為n
和m
。同時給你一個正整數k
。如果
nums1[i]
可以被nums2[j] * k
整除,則稱數對(i, j)
為 優質數對(0 <= i <= n - 1
,0 <= j <= m - 1
)。返回 優質數對 的總數。
2024年10月12日
【leetcode】3158. 求出出現兩次數字的 XOR 值
題意:
給你一個陣列
nums
,陣列中的數字 要麼 出現一次,要麼 出現兩次。請你返回陣列中所有出現兩次數字的按位
XOR
值,如果沒有數字出現過兩次,返回 0 。
2024年10月13日
【leetcode】1884. 雞蛋掉落-兩枚雞蛋
題意:
給你 2 枚相同 的雞蛋,和一棟從第
1
層到第n
層共有n
層樓的建築。已知存在樓層
f
,滿足0 <= f <= n
,任何從 高於f
的樓層落下的雞蛋都 會碎 ,從f
樓層或比它低 的樓層落下的雞蛋都 不會碎 。每次操作,你可以取一枚 沒有碎 的雞蛋並把它從任一樓層
x
扔下(滿足1 <= x <= n
)。如果雞蛋碎了,你就不能再次使用它。如果某枚雞蛋扔下後沒有摔碎,則可以在之後的操作中 重複使用 這枚雞蛋。請你計算並返回要確定
f
確切的值 的 最小操作次數 是多少?
2024年10月14日
【leetcode】234. 迴文連結串列
題意:
給你一個單連結串列的頭節點
head
,請你判斷該連結串列是否為迴文連結串列。如果是,返回true
;否則,返回false
。
【leetcode】138. 隨機連結串列的複製
題意:
給你一個長度為
n
的連結串列,每個節點包含一個額外增加的隨機指標random
,該指標可以指向連結串列中的任何節點或空節點。構造這個連結串列的深複製。 深複製應該正好由
n
個 全新 節點組成,其中每個新節點的值都設為其對應的原節點的值。新節點的next
指標和random
指標也都應指向複製連結串列中的新節點,並使原連結串列和複製連結串列中的這些指標能夠表示相同的連結串列狀態。複製連結串列中的指標都不應指向原連結串列中的節點 。例如,如果原連結串列中有
X
和Y
兩個節點,其中X.random --> Y
。那麼在複製連結串列中對應的兩個節點x
和y
,同樣有x.random --> y
。返回複製連結串列的頭節點。
用一個由
n
個節點組成的連結串列來表示輸入/輸出中的連結串列。每個節點用一個[val, random_index]
表示:
val
:一個表示Node.val
的整數。random_index
:隨機指標指向的節點索引(範圍從0
到n-1
);如果不指向任何節點,則為null
。你的程式碼 只 接受原連結串列的頭節點
head
作為傳入引數。
【leetcode】25. K 個一組翻轉連結串列
題意:
給你連結串列的頭節點
head
,每k
個節點一組進行翻轉,請你返回修改後的連結串列。
k
是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是k
的整數倍,那麼請將最後剩餘的節點保持原有順序。你不能只是單純的改變節點內部的值,而是需要實際進行節點交換。
2024年10月15日
【leetcode】92. 反轉連結串列 II
題意:
給你單連結串列的頭指標
head
和兩個整數left
和right
,其中left <= right
。請你反轉從位置left
到位置right
的連結串列節點,返回 反轉後的連結串列 。
【leetcode】61. 旋轉連結串列
題意:
給你一個連結串列的頭節點
head
,旋轉連結串列,將連結串列每個節點向右移動k
個位置。
【leetcode】86. 分隔連結串列
題意:
給你一個連結串列的頭節點
head
和一個特定值x
,請你對連結串列進行分隔,使得所有 小於x
的節點都出現在 大於或等於x
的節點之前。你應當 保留 兩個分割槽中每個節點的初始相對位置。
【leetcode】3200. 三角形的最大高度
題意:
給你兩個整數
red
和blue
,分別表示紅色球和藍色球的數量。你需要使用這些球來組成一個三角形,滿足第 1 行有 1 個球,第 2 行有 2 個球,第 3 行有 3 個球,依此類推。每一行的球必須是 相同 顏色,且相鄰行的顏色必須 不同。
返回可以實現的三角形的 最大 高度。
2024年10月16日
【leetcode】3194. 最小元素和最大元素的最小平均值
題意:
你有一個初始為空的浮點數陣列
averages
。另給你一個包含n
個整數的陣列nums
,其中n
為偶數。你需要重複以下步驟
n / 2
次:
- 從
nums
中移除 最小 的元素minElement
和 最大 的元素maxElement
。- 將
(minElement + maxElement) / 2
加入到averages
中。返回
averages
中的 最小 元素。
2024年10月17日
【leetcode】74. 搜尋二維矩陣
題意:
給你一個滿足下述兩條屬性的
m x n
整數矩陣:
- 每行中的整數從左到右按非嚴格遞增順序排列。
- 每行的第一個整數大於前一行的最後一個整數。
給你一個整數
target
,如果target
在矩陣中,返回true
;否則,返回false
。
2024年10月18日
【leetcode】3191. 使二進位制陣列全部等於 1 的最少操作次數 I
題意:
給你一個二進位制陣列
nums
。你可以對陣列執行以下操作 任意 次(也可以 0 次):
- 選擇陣列中 任意連續 3 個元素,並將它們 全部反轉 。
反轉 一個元素指的是將它的值從 0 變 1 ,或者從 1 變 0 。
請你返回將
nums
中所有元素變為 1 的 最少 操作次數。如果無法全部變成 1 ,返回 -1 。
2024年10月19日
【leetcode】3192. 使二進位制陣列全部等於 1 的最少操作次數 II
題意:
給你一個二進位制陣列
nums
。你可以對陣列執行以下操作 任意 次(也可以 0 次):
- 選擇陣列中 任意 一個下標
i
,並將從下標i
開始一直到陣列末尾 所有 元素 反轉 。反轉 一個元素指的是將它的值從 0 變 1 ,或者從 1 變 0 。
請你返回將
nums
中所有元素變為 1 的 最少 操作次數。
2024年10月20日
【leetcode】908. 最小差值 I
題意:
給你一個整數陣列
nums
,和一個整數k
。在一個操作中,您可以選擇
0 <= i < nums.length
的任何索引i
。將nums[i]
改為nums[i] + x
,其中x
是一個範圍為[-k, k]
的任意整數。對於每個索引i
,最多 只能 應用 一次 此操作。
nums
的 分數 是nums
中最大和最小元素的差值。在對
nums
中的每個索引最多應用一次上述操作後,返回nums
的最低 分數 。
2024年10月21日
【leetcode】910. 最小差值 II
題意:
給你一個整數陣列
nums
,和一個整數k
。對於每個下標
i
(0 <= i < nums.length
),將nums[i]
變成nums[i] + k
或nums[i] - k
。
nums
的 分數 是nums
中最大元素和最小元素的差值。在更改每個下標對應的值之後,返回
nums
的最小 分數 。
2024年10月22日
【leetcode】3184. 構成整天的下標對數目 I
題意:
給你一個整數陣列
hours
,表示以 小時 為單位的時間,返回一個整數,表示滿足i < j
且hours[i] + hours[j]
構成 整天 的下標對i
,j
的數目。整天 定義為時間持續時間是 24 小時的 整數倍 。
例如,1 天是 24 小時,2 天是 48 小時,3 天是 72 小時,以此類推。
【leetcode】3185. 構成整天的下標對數目 II
題意:
給你一個整數陣列
hours
,表示以 小時 為單位的時間,返回一個整數,表示滿足i < j
且hours[i] + hours[j]
構成 整天 的下標對i
,j
的數目。整天 定義為時間持續時間是 24 小時的 整數倍 。
例如,1 天是 24 小時,2 天是 48 小時,3 天是 72 小時,以此類推。
2024年10月23日
【leetcode】153. 尋找旋轉排序陣列中的最小值
題意:
已知一個長度為
n
的陣列,預先按照升序排列,經由1
到n
次 旋轉 後,得到輸入陣列。例如,原陣列nums = [0,1,2,4,5,6,7]
在變化後可能得到:
- 若旋轉
4
次,則可以得到[4,5,6,7,0,1,2]
- 若旋轉
7
次,則可以得到[0,1,2,4,5,6,7]
注意,陣列
[a[0], a[1], a[2], ..., a[n-1]]
旋轉一次 的結果為陣列[a[n-1], a[0], a[1], a[2], ..., a[n-2]]
。給你一個元素值 互不相同 的陣列
nums
,它原來是一個升序排列的陣列,並按上述情形進行了多次旋轉。請你找出並返回陣列中的 最小元素 。你必須設計一個時間複雜度為
O(log n)
的演算法解決此問題。
【leetcode】33. 搜尋旋轉排序陣列
題意:
整數陣列
nums
按升序排列,陣列中的值 互不相同 。在傳遞給函式之前,
nums
在預先未知的某個下標k
(0 <= k < nums.length
)上進行了 旋轉,使陣列變為[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(下標 從 0 開始 計數)。例如,[0,1,2,4,5,6,7]
在下標3
處經旋轉後可能變為[4,5,6,7,0,1,2]
。給你 旋轉後 的陣列
nums
和一個整數target
,如果nums
中存在這個目標值target
,則返回它的下標,否則返回-1
。你必須設計一個時間複雜度為
O(log n)
的演算法解決此問題。
【leetcode】4. 尋找兩個正序陣列的中位數
題意:
給定兩個大小分別為
m
和n
的正序(從小到大)陣列nums1
和nums2
。請你找出並返回這兩個正序陣列的 中位數 。演算法的時間複雜度應該為
O(log (m+n))
。
2024年10月24日
【leetcode】3175. 找到連續贏 K 場比賽的第一位玩家
題意:
有
n
位玩家在進行比賽,玩家編號依次為0
到n - 1
。給你一個長度為
n
的整數陣列skills
和一個 正 整數k
,其中skills[i]
是第i
位玩家的技能等級。skills
中所有整數 互不相同 。所有玩家從編號
0
到n - 1
排成一列。比賽進行方式如下:
- 佇列中最前面兩名玩家進行一場比賽,技能等級 更高 的玩家勝出。
- 比賽後,獲勝者保持在佇列的開頭,而失敗者排到佇列的末尾。
這個比賽的贏家是 第一位連續 贏下
k
場比賽的玩家。請你返回這個比賽的贏家編號。
2024年10月26日
【leetcode】46. 全排列
題意:
給定一個不含重複數字的陣列
nums
,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。
2024年10月27日
【leetcode】78. 子集
題意:
給你一個整數陣列
nums
,陣列中的元素 互不相同 。返回該陣列所有可能的子集(冪集)。解集 不能 包含重複的子集。你可以按 任意順序 返回解集。
2024年10月28日
【leetcode】17. 電話號碼的字母組合
題意:
給定一個僅包含數字
2-9
的字串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。
2024年10月29日
【leetcode】22. 括號生成
題意:
數字
n
代表生成括號的對數,請你設計一個函式,用於能夠生成所有可能的並且 有效的 括號組合。
【leetcode】79. 單詞搜尋
題意:
給定一個
m x n
二維字元網格board
和一個字串單詞word
。如果word
存在於網格中,返回true
;否則,返回false
。單詞必須按照字母順序,透過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。
【leetcode】131. 分割回文串
題意:
給你一個字串
s
,請你將s
分割成一些子串,使每個子串都是 迴文串 。返回s
所有可能的分割方案。
【leetcode】51. N 皇后
題意:
按照國際象棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。
n 皇后問題 研究的是如何將
n
個皇后放置在n×n
的棋盤上,並且使皇后彼此之間不能相互攻擊。給你一個整數
n
,返回所有不同的 n 皇后問題 的解決方案。每一種解法包含一個不同的 n 皇后問題 的棋子放置方案,該方案中
'Q'
和'.'
分別代表了皇后和空位。
【leetcode】200. 島嶼數量
題意:
給你一個由
'1'
(陸地)和'0'
(水)組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
【leetcode】208. 實現 Trie (字首樹)
題意:
Trie(發音類似 "try")或者說 字首樹 是一種樹形資料結構,用於高效地儲存和檢索字串資料集中的鍵。這一資料結構有相當多的應用情景,例如自動補全和拼寫檢查。
請你實現 Trie 類:
Trie()
初始化字首樹物件。void insert(String word)
向字首樹中插入字串word
。boolean search(String word)
如果字串word
在字首樹中,返回true
(即,在檢索之前已經插入);否則,返回false
。boolean startsWith(String prefix)
如果之前已經插入的字串word
的字首之一為prefix
,返回true
;否則,返回false
。
2024年10月30日
【leetcode】226. 翻轉二叉樹
題意:
給你一棵二叉樹的根節點
root
,翻轉這棵二叉樹,並返回其根節點。
2024年10月31日
【leetcode】101. 對稱二叉樹
題意:
給你一個二叉樹的根節點
root
, 檢查它是否軸對稱。
【leetcode】108. 將有序陣列轉換為二叉搜尋樹
題意:
給你一個整數陣列
nums
,其中元素已經按 升序 排列,請你將其轉換為一棵 平衡 二叉搜尋樹。
【leetcode】98. 驗證二叉搜尋樹
題意:
給你一個二叉樹的根節點
root
,判斷其是否是一個有效的二叉搜尋樹。有效 二叉搜尋樹定義如下:
- 節點的左子樹只包含 小於 當前節點的數。
- 節點的右子樹只包含 大於 當前節點的數。
- 所有左子樹和右子樹自身必須也是二叉搜尋樹。
【leetcode】199. 二叉樹的右檢視
題意:
給定一個二叉樹的 根節點
root
,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。
【leetcode】114. 二叉樹展開為連結串列
題意:
給你二叉樹的根結點
root
,請你將它展開為一個單連結串列:
- 展開後的單連結串列應該同樣使用
TreeNode
,其中right
子指標指向連結串列中下一個結點,而左子指標始終為null
。- 展開後的單連結串列應該與二叉樹先序遍歷順序相同。
【leetcode】112. 路徑總和
題意:
給你二叉樹的根節點
root
和一個表示目標和的整數targetSum
。判斷該樹中是否存在 根節點到葉子節點 的路徑,這條路徑上所有節點值相加等於目標和targetSum
。如果存在,返回true
;否則,返回false
。葉子節點 是指沒有子節點的節點。
【leetcode】113. 路徑總和 II
題意:
給你二叉樹的根節點
root
和一個整數目標和targetSum
,找出所有 從根節點到葉子節點 路徑總和等於給定目標和的路徑。葉子節點 是指沒有子節點的節點。
【leetcode】437. 路徑總和 III
題意:
給定一個二叉樹的根節點
root
,和一個整數targetSum
,求該二叉樹裡節點值之和等於targetSum
的 路徑 的數目。路徑 不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
【leetcode】124. 二叉樹中的最大路徑和
題意:
二叉樹中的 路徑 被定義為一條節點序列,序列中每對相鄰節點之間都存在一條邊。同一個節點在一條路徑序列中 至多出現一次 。該路徑 至少包含一個 節點,且不一定經過根節點。
路徑和 是路徑中各節點值的總和。
給你一個二叉樹的根節點
root
,返回其 最大路徑和 。