2024年9月1日
【leetcode】1450. 在既定時間做作業的學生人數
題意:
給你兩個整數陣列
startTime
(開始時間)和endTime
(結束時間),並指定一個整數queryTime
作為查詢時間。已知,第
i
名學生在startTime[i]
時開始寫作業並於endTime[i]
時完成作業。請返回在查詢時間
queryTime
時正在做作業的學生人數。形式上,返回能夠使queryTime
處於區間[startTime[i], endTime[i]]
(含)的學生人數。
2024年9月2日
【leetcode】2024. 考試的最大困擾度
題意:
一位老師正在出一場由
n
道判斷題構成的考試,每道題的答案為 true (用'T'
表示)或者 false (用'F'
表示)。老師想增加學生對自己做出答案的不確定性,方法是 最大化 有 連續相同 結果的題數。(也就是連續出現 true 或者連續出現 false)。給你一個字串
answerKey
,其中answerKey[i]
是第i
個問題的正確結果。除此以外,還給你一個整數k
,表示你能進行以下操作的最多次數:
- 每次操作中,將問題的正確答案改為
'T'
或者'F'
(也就是將answerKey[i]
改為'T'
或者'F'
)。請你返回在不超過
k
次操作的情況下,最大 連續'T'
或者'F'
的數目。
【leetcode】424. 替換後的最長重複字元
給你一個字串
s
(僅由大寫英文字母組成)和一個整數k
。你可以選擇字串中的任一字元,並將其更改為任何其他大寫英文字元。該操作最多可執行k
次。在執行上述操作後,返回包含相同字母的最長子字串的長度。
【leetcode】2401. 最長優雅子陣列
給你一個由 正 整陣列成的陣列
nums
。如果
nums
的子陣列中位於 不同 位置的每對元素按位 與(AND)運算的結果等於0
,則稱該子陣列為 優雅 子陣列。返回 最長 的優雅子陣列的長度。
子陣列 是陣列中的一個 連續 部分。
注意:長度為
1
的子陣列始終視作優雅子陣列。
【leetcode】2009. 使陣列連續的最少運算元
給你一個整數陣列
nums
。每一次操作中,你可以將nums
中 任意 一個元素替換成 任意 整數。如果
nums
滿足以下條件,那麼它是 連續的 :
nums
中所有元素都是 互不相同 的。nums
中 最大 元素與 最小 元素的差等於nums.length - 1
。比方說,
nums = [4, 2, 5, 3]
是 連續的 ,但是nums = [1, 2, 3, 5, 6]
不是連續的 。請你返回使
nums
連續 的 最少 操作次數。
2024年9月3日
【leetcode】2708. 一個小組的最大實力值
給你一個下標從 0 開始的整數陣列
nums
,它表示一個班級中所有學生在一次考試中的成績。老師想選出一部分同學組成一個 非空 小組,且這個小組的 實力值 最大,如果這個小組裡的學生下標為i_0
,i_1
,i_2
, ... ,i_k
,那麼這個小組的實力值定義為nums[i_0] * nums[i_1] * nums[i_2] * ... * nums[i_k]
。請你返回老師建立的小組能得到的最大實力值為多少。
2024年9月4日
【leetcode】2860. 讓所有學生保持開心的分組方法數
給你一個下標從 0 開始、長度為
n
的整數陣列nums
,其中n
是班級中學生的總數。班主任希望能夠在讓所有學生保持開心的情況下選出一組學生:如果能夠滿足下述兩個條件之一,則認為第
i
位學生將會保持開心:
- 這位學生被選中,並且被選中的學生人數 嚴格大於
nums[i]
。- 這位學生沒有被選中,並且被選中的學生人數 嚴格小於
nums[i]
。返回能夠滿足讓所有學生保持開心的分組方法的數目。
2024年9月5日
【leetcode】3174. 清除數字
給你一個字串
s
。你的任務是重複以下操作刪除 所有 數字字元:
- 刪除 第一個數字字元 以及它左邊 最近 的 非數字 字元。
請你返回刪除所有數字字元以後剩下的字串。
2024年9月6日
【leetcode】191. 位1的個數
編寫一個函式,獲取一個正整數的二進位制形式並返回其二進位制表示式中 設定位 的個數(也被稱為漢明重量)。
2024年9月7日
【leetcode】209. 長度最小的子陣列
給定一個含有
n
個正整數的陣列和一個正整數target
。找出該陣列中滿足其總和大於等於
target
的長度最小的 子陣列[numsl, numsl+1, ..., numsr-1, numsr]
,並返回其長度。如果不存在符合條件的子陣列,返回0
。
2024年9月8日
【leetcode】977. 有序陣列的平方
給你一個按 非遞減順序 排序的整數陣列
nums
,返回 每個數字的平方 組成的新陣列,要求也按 非遞減順序 排序。請你設計時間複雜度為
O(n)
的演算法解決本問題。
2024年9月9日
【leetcode】2181. 合併零之間的節點
給你一個連結串列的頭節點
head
,該連結串列包含由0
分隔開的一連串整數。連結串列的 開端 和 末尾 的節點都滿足Node.val == 0
。對於每兩個相鄰的
0
,請你將它們之間的所有節點合併成一個節點,其值是所有已合併節點的值之和。然後將所有0
移除,修改後的連結串列不應該含有任何0
。返回修改後連結串列的頭節點
head
。
2024年9月10日
【leetcode】456. 132 模式
給你一個整數陣列
nums
,陣列中共有n
個整數。132 模式的子序列 由三個整數nums[i]
、nums[j]
和nums[k]
組成,並同時滿足:i < j < k
和nums[i] < nums[k] < nums[j]
。如果
nums
中存在 132 模式的子序列 ,返回true
;否則,返回false
。
【leetcode】42. 接雨水
給定
n
個非負整數表示每個寬度為1
的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。
2024年9月11日
【leetcode】2555. 兩個線段獲得的最多獎品
在 X軸 上有一些獎品。給你一個整數陣列
prizePositions
,它按照 非遞減 順序排列,其中prizePositions[i]
是第i
件獎品的位置。數軸上一個位置可能會有多件獎品。再給你一個整數k
。你可以同時選擇兩個端點為整數的線段。每個線段的長度都必須是
k
。你可以獲得位置在任一線段上的所有獎品(包括線段的兩個端點)。注意,兩個線段可能會有相交。
- 比方說
k = 2
,你可以選擇線段[1, 3]
和[2, 4]
,你可以獲得滿足1 <= prizePositions[i] <= 3
或者2 <= prizePositions[i] <= 4
的所有獎品 i 。請你返回在選擇兩個最優線段的前提下,可以獲得的 最多 獎品數目。
2024年9月12日
【leetcode】2576. 求出最多標記下標
給你一個下標從 0 開始的整數陣列
nums
。一開始,所有下標都沒有被標記。你可以執行以下操作任意次:
- 選擇兩個 互不相同且未標記 的下標
i
和j
,滿足2 * nums[i] <= nums[j]
,標記下標i
和j
。請你執行上述操作任意次,返回
nums
中最多可以標記的下標數目。
2024年9月13日
【leetcode】698. 劃分為k個相等的子集
給定一個整數陣列
nums
和一個正整數k
,找出是否有可能把這個陣列分成k
個非空子集,其總和都相等。
2024年9月14日
【leetcode】2390. 從字串中移除星號
給你一個包含若干星號
*
的字串s
。在一步操作中,你可以:
- 選中
s
中的一個星號。- 移除星號 左側 最近的那個 非星號 字元,並移除該星號自身。
返回移除 所有 星號之後的字串。
注意:
- 生成的輸入保證總是可以執行題面中描述的操作。
- 可以證明結果字串是唯一的。
2024年9月15日
【leetcode】2848. 與車相交的點
給你一個下標從 0 開始的二維整數陣列
nums
表示汽車停放在數軸上的座標。對於任意下標i
,nums[i] = [starti, endi]
,其中starti
是第i
輛車的起點,endi
是第i
輛車的終點。返回數軸上被車 任意部分 覆蓋的整數點的數目。
2024年9月16日
【leetcode】1184. 公交站間的距離
環形公交路線上有
n
個站,按次序從0
到n - 1
進行編號。我們已知每一對相鄰公交站之間的距離,distance[i]
表示編號為i
的車站和編號為(i + 1) % n
的車站之間的距離。環線上的公交車都可以按順時針和逆時針的方向行駛。
返回乘客從出發點
start
到目的地destination
之間的最短距離。
2024年9月17日
【leetcode】815. 公交路線
給你一個陣列
routes
,表示一系列公交線路,其中每個routes[i]
表示一條公交線路,第i
輛公交車將會在上面迴圈行駛。
- 例如,路線
routes[0] = [1, 5, 7]
表示第0
輛公交車會一直按序列1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> ...
這樣的車站路線行駛。現在從
source
車站出發(初始時不在公交車上),要前往target
車站。 期間僅可乘坐公交車。求出 最少乘坐的公交車數量 。如果不可能到達終點車站,返回
-1
。
2024年9月18日
【leetcode】2332. 坐上公交的最晚時間
給你一個下標從 0 開始長度為
n
的整數陣列buses
,其中buses[i]
表示第i
輛公交車的出發時間。同時給你一個下標從 0 開始長度為m
的整數陣列passengers
,其中passengers[j]
表示第j
位乘客的到達時間。所有公交車出發的時間互不相同,所有乘客到達的時間也互不相同。給你一個整數
capacity
,表示每輛公交車 最多 能容納的乘客數目。每位乘客都會搭乘下一輛有座位的公交車。如果你在
y
時刻到達,公交在x
時刻出發,滿足y <= x
且公交沒有滿,那麼你可以搭乘這一輛公交。最早 到達的乘客優先上車。返回你可以搭乘公交車的最晚到達公交站時間。你 不能 跟別的乘客同時刻到達。
注意:陣列
buses
和passengers
不一定是有序的。
2024年9月19日
【leetcode】2414. 最長的字母序連續子字串的長度
字母序連續字串 是由字母表中連續字母組成的字串。換句話說,字串
"abcdefghijklmnopqrstuvwxyz"
的任意子字串都是 字母序連續字串 。
- 例如,
"abc"
是一個字母序連續字串,而"acb"
和"za"
不是。給你一個僅由小寫英文字母組成的字串
s
,返回其 最長 的 字母序連續子字串 的長度。
2024年9月20日
【leetcode】2376. 統計特殊整數
如果一個正整數每一個數位都是 互不相同 的,我們稱它是 特殊整數 。
給你一個 正 整數
n
,請你返回區間[1, n]
之間特殊整數的數目。
2024年9月21日
【leetcode】2374. 邊積分最高的節點
給你一個有向圖,圖中有
n
個節點,節點編號從0
到n - 1
,其中每個節點都 恰有一條 出邊。圖由一個下標從 0 開始、長度為
n
的整數陣列edges
表示,其中edges[i]
表示存在一條從節點i
到節點edges[i]
的 有向 邊。節點
i
的 邊積分 定義為:所有存在一條指向節點i
的邊的節點的 編號 總和。返回 邊積分 最高的節點。如果多個節點的 邊積分 相同,返回編號 最小 的那個。
2024年9月22日
【leetcode】997. 找到小鎮的法官
小鎮裡有
n
個人,按從1
到n
的順序編號。傳言稱,這些人中有一個暗地裡是小鎮法官。如果小鎮法官真的存在,那麼:
- 小鎮法官不會信任任何人。
- 每個人(除了小鎮法官)都信任這位小鎮法官。
- 只有一個人同時滿足屬性 1 和屬性 2 。
給你一個陣列
trust
,其中trust[i] = [a_i, b_i]
表示編號為a_i
的人信任編號為b_i
的人。如果小鎮法官存在並且可以確定他的身份,請返回該法官的編號;否則,返回
-1
。
2024年9月23日
【leetcode】1014. 最佳觀光組合
給你一個正整數陣列
values
,其中values[i]
表示第i
個觀光景點的評分,並且兩個景點i
和j
之間的 距離 為j - i
。一對景點(
i < j
)組成的觀光組合的得分為values[i] + values[j] + i - j
,也就是景點的評分之和 減去 它們兩者之間的距離。返回一對觀光景點能取得的最高分。
2024年9月24日
【leetcode】5. 最長迴文子串
給你一個字串
s
,找到s
中最長的迴文子串。
【leetcode】516. 最長迴文子序列
給你一個字串
s
,找出其中最長的迴文子序列,並返回該序列的長度。子序列定義為:不改變剩餘字元順序的情況下,刪除某些字元或者不刪除任何字元形成的一個序列。
【leetcode】2207. 字串中最多數目的子序列
給你一個下標從 0 開始的字串
text
和另一個下標從 0 開始且長度為2
的字串pattern
,兩者都只包含小寫英文字母。你可以在
text
中任意位置插入 一個 字元,這個插入的字元必須是pattern[0]
或者pattern[1]
。注意,這個字元可以插入在text
開頭或者結尾的位置。請你返回插入一個字元後,
text
中最多包含多少個等於pattern
的 子序列 。子序列 指的是將一個字串刪除若干個字元後(也可以不刪除),剩餘字元保持原本順序得到的字串。
【leetcode】1143. 最長公共子序列
給定兩個字串
text1
和text2
,返回這兩個字串的最長 公共子序列 的長度。如果不存在 公共子序列 ,返回0
。一個字串的 子序列 是指這樣一個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。
- 例如,
"ace"
是"abcde"
的子序列,但"aec"
不是"abcde"
的子序列。兩個字串的 公共子序列 是這兩個字串所共同擁有的子序列。
【leetcode】72. 編輯距離
給你兩個單詞
word1
和word2
, 請返回將word1
轉換成word2
所使用的最少運算元。你可以對一個單詞進行如下三種操作:
- 插入一個字元
- 刪除一個字元
- 替換一個字元
2024年9月25日
【leetcode】279. 完全平方數
給你一個整數
n
,返回 和為n
的完全平方數的最少數量 。完全平方數 是一個整數,其值等於另一個整數的平方;換句話說,其值等於一個整數自乘的積。例如,
1
、4
、9
和16
都是完全平方數,而3
和11
不是。
2024年9月26日
【leetcode】2535. 陣列元素和與數字和的絕對差
給你一個正整數陣列
nums
。
- 元素和 是
nums
中的所有元素相加求和。- 數字和 是
nums
中每一個元素的每一數位(重複數位需多次求和)相加求和。返回 元素和 與 數字和 的絕對差。
注意:兩個整數
x
和y
的絕對差定義為|x - y|
。
2024年9月27日
【leetcode】76. 最小覆蓋子串
給你一個字串
s
、一個字串t
。返回s
中涵蓋t
所有字元的最小子串。如果s
中不存在涵蓋t
所有字元的子串,則返回空字串""
。注意:
- 對於
t
中重複字元,我們尋找的子字串中該字元數量必須不少於t
中該字元數量。- 如果
s
中存在這樣的子串,我們保證它是唯一的答案。
【leetcode】41. 缺失的第一個正數
給你一個未排序的整數陣列
nums
,請你找出其中沒有出現的最小的正整數。請你實現時間複雜度為
O(n)
並且只使用常數級別額外空間的解決方案。
【leetcode】2516. 每種字元至少取 K 個
給你一個由字元
'a'
、'b'
、'c'
組成的字串s
和一個非負整數k
。每分鐘,你可以選擇取走s
最左側 還是 最右側 的那個字元。你必須取走每種字元 至少
k
個,返回需要的 最少 分鐘數;如果無法取到,則返回-1
。
【leetcode】54. 螺旋矩陣
給你一個
m
行n
列的矩陣matrix
,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。
【leetcode】48. 旋轉影像
給定一個 n × n 的二維矩陣
matrix
表示一個影像。請你將影像順時針旋轉 90 度。你必須在 原地 旋轉影像,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉影像。
【leetcode】240. 搜尋二維矩陣 II
編寫一個高效的演算法來搜尋
m*n
矩陣matrix
中的一個目標值target
。該矩陣具有以下特性:
- 每行的元素從左到右升序排列。
- 每列的元素從上到下升序排列。
2024年9月28日
【leetcode】62. 不同路徑
一個機器人位於一個
m x n
網格的左上角 (起始點在下圖中標記為 “Start” )。機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。
問總共有多少條不同的路徑?
【leetcode】64. 最小路徑和
給定一個包含非負整數的
m x n
網格grid
,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明:每次只能向下或者向右移動一步。
【leetcode】31. 下一個排列
整數陣列的一個 排列 就是將其所有成員以序列或線性順序排列。
- 例如,
arr = [1,2,3]
,以下這些都可以視作arr
的排列:[1,2,3]
、[1,3,2]
、[3,1,2]
、[2,3,1]
。整數陣列的 下一個排列 是指其整數的下一個字典序更大的排列。更正式地,如果陣列的所有排列根據其字典順序從小到大排列在一個容器中,那麼陣列的 下一個排列 就是在這個有序容器中排在它後面的那個排列。如果不存在下一個更大的排列,那麼這個陣列必須重排為字典序最小的排列(即,其元素按升序排列)。
- 例如,
arr = [1,2,3]
的下一個排列是[1,3,2]
。- 類似地,
arr = [2,3,1]
的下一個排列是[3,1,2]
。- 而
arr = [3,2,1]
的下一個排列是[1,2,3]
,因為[3,2,1]
不存在一個字典序更大的排列。給你一個整數陣列
nums
,找出nums
的下一個排列。必須原地修改,只允許使用額外常數空間。
2024年9月29日
【leetcode】155. 最小棧
設計一個支援
push
,pop
,top
操作,並能在常數時間內檢索到最小元素的棧。實現
MinStack
類:
MinStack()
初始化堆疊物件。void push(int val)
將元素val推入堆疊。void pop()
刪除堆疊頂部的元素。int top()
獲取堆疊頂部的元素。int getMin()
獲取堆疊中的最小元素。
【leetcode】394. 字串解碼
給定一個經過編碼的字串,返回它解碼後的字串。
編碼規則為:
k[encoded_string]
,表示其中方括號內部的encoded_string
正好重複k
次。注意k
保證為正整數。你可以認為輸入字串總是有效的;輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。
此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數
k
,例如不會出現像3a
或2[4]
的輸入。
2024年9月30日
【leetcode】84. 柱狀圖中最大的矩形
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
【leetcode】215. 陣列中的第K個最大元素
給定整數陣列
nums
和整數k
,請返回陣列中第k
個最大的元素。請注意,你需要找的是陣列排序後的第
k
個最大的元素,而不是第k
個不同的元素。你必須設計並實現時間複雜度為
O(n)
的演算法解決此問題。
2024年9月31日
【leetcode】1845. 座位預約管理系統
請你設計一個管理
n
個座位預約的系統,座位編號從1
到n
。請你實現
SeatManager
類:
SeatManager(int n)
初始化一個SeatManager
物件,它管理從1
到n
編號的n
個座位。所有座位初始都是可預約的。int reserve()
返回可以預約座位的 最小編號 ,此座位變為不可預約。void unreserve(int seatNumber)
將給定編號seatNumber
對應的座位變成可以預約。
【leetcode】347. 前 K 個高頻元素
給你一個整數陣列
nums
和一個整數k
,請你返回其中出現頻率前k
高的元素。你可以按 任意順序 返回答案。