2024年5月1日
【leetcode】2462. 僱傭 K 位工人的總代價
題意:
給你一個下標從 0 開始的整數陣列
costs
,其中costs[i]
是僱傭第i
位工人的代價。同時給你兩個整數
k
和candidates
。我們想根據以下規則恰好僱傭k
位工人:
- 總共進行
k
輪僱傭,且每一輪恰好僱傭一位工人。- 在每一輪僱傭中,從最前面 candidates 和最後面 candidates 人中選出代價最小的一位工人,如果有多位代價相同且最小的工人,選擇下標更小的一位工人。
- 比方說,
costs = [3,2,7,7,1,2]
且candidates = 2
,第一輪僱傭中,我們選擇第4
位工人,因為他的代價最小[3,2,7,7,*1*,2]
。- 第二輪僱傭,我們選擇第
1
位工人,因為他們的代價與第4
位工人一樣都是最小代價,而且下標更小,[3,*2*,7,7,2]
。注意每一輪僱傭後,剩餘工人的下標可能會發生變化。- 如果剩餘員工數目不足
candidates
人,那麼下一輪僱傭他們中代價最小的一人,如果有多位代價相同且最小的工人,選擇下標更小的一位工人。- 一位工人只能被選擇一次。
返回僱傭恰好
k
位工人的總代價。
2024年5月2日
【leetcode】2462. 僱傭 K 位工人的總代價
題意:
有
n
名工人。 給定兩個陣列quality
和wage
,其中,quality[i]
表示第i
名工人的工作質量,其最低期望工資為wage[i]
。現在我們想僱傭
k
名工人組成一個工資組。在僱傭 一組k
名工人時,我們必須按照下述規則向他們支付工資:
- 對工資組中的每名工人,應當按其工作質量與同組其他工人的工作質量的比例來支付工資。
- 工資組中的每名工人至少應當得到他們的最低期望工資。
給定整數
k
,返回 組成滿足上述條件的付費群體所需的最小金額 。在實際答案的10^-5
以內的答案將被接受。
2024年5月3日
【leetcode】1491. 去掉最低工資和最高工資後的工資平均值
題意:
給你一個整數陣列
salary
,陣列裡每個數都是 唯一 的,其中salary[i]
是第i
個員工的工資。請你返回去掉最低工資和最高工資以後,剩下員工工資的平均值。
2024年5月4日
【leetcode】1235. 規劃兼職工作
題意:
你打算利用空閒時間來做兼職工作賺些零花錢。
這裡有
n
份兼職工作,每份工作預計從startTime[i]
開始到endTime[i]
結束,報酬為profit[i]
。給你一份兼職工作表,包含開始時間
startTime
,結束時間endTime
和預計報酬profit
三個陣列,請你計算並返回可以獲得的最大報酬。注意,時間上出現重疊的 2 份工作不能同時進行。
如果你選擇的工作在時間
X
結束,那麼你可以立刻進行在時間X
開始的下一份工作。
2024年5月5日
【leetcode】1652. 拆炸彈
題意:
你有一個炸彈需要拆除,時間緊迫!你的情報員會給你一個長度為
n
的 迴圈 陣列code
以及一個金鑰k
。為了獲得正確的密碼,你需要替換掉每一個數字。所有數字會 同時 被替換。
- 如果
k > 0
,將第i
個數字用 接下來k
個數字之和替換。- 如果
k < 0
,將第i
個數字用 之前k
個數字之和替換。- 如果
k == 0
,將第i
個數字用0
替換。由於
code
是迴圈的,code[n-1]
下一個元素是code[0]
,且code[0]
前一個元素是code[n-1]
。給你 迴圈 陣列
code
和整數金鑰k
,請你返回解密後的結果來拆除炸彈!
2024年5月6日
【leetcode】238. 除自身以外陣列的乘積
題意:
給你一個整數陣列
nums
,返回 陣列answer
,其中answer[i]
等於nums
中除nums[i]
之外其餘各元素的乘積。題目資料 保證 陣列
nums
之中任意元素的全部字首元素和字尾的乘積都在 32 位 整數範圍內。請 不要使用除法,且在
O(n)
時間複雜度內完成此題。保證 陣列
nums
之中任意元素的全部字首元素和字尾的乘積都在 32 位 整數範圍內。進階:你可以在
O(1)
的額外空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出陣列 不被視為 額外空間。)
2024年5月7日
【leetcode】100. 相同的樹
題意:
給你兩棵二叉樹的根節點
p
和q
,編寫一個函式來檢驗這兩棵樹是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
2024年5月8日
【leetcode】2079. 給植物澆水
題意:
你打算用一個水罐給花園裡的
n
株植物澆水。植物排成一行,從左到右進行標記,編號從0
到n - 1
。其中,第i
株植物的位置是x = i
。x = -1
處有一條河,你可以在那裡重新灌滿你的水罐。每一株植物都需要澆特定量的水。你將會按下面描述的方式完成澆水:
- 按從左到右的順序給植物澆水。
- 在給當前植物澆完水之後,如果你沒有足夠的水 完全 澆灌下一株植物,那麼你就需要返回河邊重新裝滿水罐。
- 你 不能 提前重新灌滿水罐。
最初,你在河邊(也就是,
x = -1
),在 x 軸上每移動 一個單位 都需要 一步 。給你一個下標從 0 開始的整數陣列
plants
,陣列由n
個整陣列成。其中,plants[i]
為第i
株植物需要的水量。另有一個整數capacity
表示水罐的容量,返回澆灌所有植物需要的 步數 。
2024年5月9日
【leetcode】2105. 給植物澆水 II
題意:
Alice 和 Bob 打算給花園裡的
n
株植物澆水。植物排成一行,從左到右進行標記,編號從0
到n - 1
。其中,第i
株植物的位置是x = i
。每一株植物都需要澆特定量的水。Alice 和 Bob 每人有一個水罐,最初是滿的 。他們按下面描述的方式完成澆水:
- Alice 按 從左到右 的順序給植物澆水,從植物
0
開始。Bob 按 從右到左 的順序給植物澆水,從植物n - 1
開始。他們 同時 給植物澆水。- 無論需要多少水,為每株植物澆水所需的時間都是相同的。
- 如果 Alice/Bob 水罐中的水足以 完全 灌溉植物,他們 必須 給植物澆水。否則,他們 首先(立即)重新裝滿罐子,然後給植物澆水。
- 如果 Alice 和 Bob 到達同一株植物,那麼當前水罐中水 更多 的人會給這株植物澆水。如果他倆水量相同,那麼 Alice 會給這株植物澆水。
給你一個下標從 0 開始的整數陣列
plants
,陣列由n
個整陣列成。其中,plants[i]
為第i
株植物需要的水量。另有兩個整數capacityA
和capacityB
分別表示 Alice 和 Bob 水罐的容量。返回兩人澆灌所有植物過程中重新灌滿水罐的 次數 。
2024年5月10日
【leetcode】2960. 統計已測試裝置
題意:
給你一個長度為
n
、下標從 0 開始的整數陣列batteryPercentages
,表示n
個裝置的電池百分比。你的任務是按照順序測試每個裝置
i
,執行以下測試操作:
- 如果
batteryPercentages[i]
大於 0 :
- 增加 已測試裝置的計數。
- 將下標在
[i + 1, n - 1]
的所有裝置的電池百分比減少1
,確保它們的電池百分比 不會低於0
,即batteryPercentages[j] = max(0, batteryPercentages[j] - 1)
。- 移動到下一個裝置。
- 否則,移動到下一個裝置而不執行任何測試。
返回一個整數,表示按順序執行測試操作後 已測試裝置 的數量。
2024年5月11日
【leetcode】2391. 收集垃圾的最少總時間
題意:
給你一個下標從 0 開始的字串陣列
garbage
,其中garbage[i]
表示第i
個房子的垃圾集合。garbage[i]
只包含字元'M'
,'P'
和'G'
,但可能包含多個相同字元,每個字元分別表示一單位的金屬、紙和玻璃。垃圾車收拾 一 單位的任何一種垃圾都需要花費1
分鐘。同時給你一個下標從 0 開始的整數陣列
travel
,其中travel[i]
是垃圾車從房子i
行駛到房子i + 1
需要的分鐘數。城市裡總共有三輛垃圾車,分別收拾三種垃圾。每輛垃圾車都從房子
0
出發,按順序 到達每一棟房子。但它們 不是必須 到達所有的房子。任何時刻只有 一輛 垃圾車處在使用狀態。當一輛垃圾車在行駛或者收拾垃圾的時候,另外兩輛車 不能 做任何事情。
請你返回收拾完所有垃圾需要花費的 最少 總分鐘數。
2024年5月12日
【leetcode】1553. 吃掉 N 個橘子的最少天數
題意:
廚房裡總共有
n
個橘子,你決定每一天選擇如下方式之一吃這些橘子:
- 吃掉一個橘子。
- 如果剩餘橘子數
n
能被 2 整除,那麼你可以吃掉n/2
個橘子。- 如果剩餘橘子數
n
能被 3 整除,那麼你可以吃掉2*(n/3)
個橘子。每天你只能從以上 3 種方案中選擇一種方案。
請你返回吃掉所有
n
個橘子的最少天數。
2024年5月13日
【leetcode】994. 腐爛的橘子
題意:
在給定的
m x n
網格grid
中,每個單元格可以有以下三個值之一:
- 值
0
代表空單元格;- 值
1
代表新鮮橘子;- 值
2
代表腐爛的橘子。每分鐘,腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。
返回 直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回
-1
。
2024年5月14日
【leetcode】2244. 完成所有任務需要的最少輪數
題意:
給你一個下標從 0 開始的整數陣列
tasks
,其中tasks[i]
表示任務的難度級別。在每一輪中,你可以完成 2 個或者 3 個 相同難度級別 的任務。返回完成所有任務需要的 最少 輪數,如果無法完成所有任務,返回
-1
。
2024年5月16日
【leetcode】1953. 你可以工作的最大週數
題意:
給你
n
個專案,編號從0
到n - 1
。同時給你一個整數陣列milestones
,其中每個milestones[i]
表示第i
個專案中的階段任務數量。你可以按下面兩個規則參與專案中的工作:
- 每週,你將會完成 某一個 專案中的 恰好一個 階段任務。你每週都 必須 工作。
- 在 連續的 兩週中,你 不能 參與並完成同一個專案中的兩個階段任務。
一旦所有專案中的全部階段任務都完成,或者僅剩餘一個階段任務都會導致你違反上面的規則,那麼你將 停止工作 。注意,由於這些條件的限制,你可能無法完成所有階段任務。
返回在不違反上面規則的情況下你 最多 能工作多少周。
2024年5月17日
【leetcode】826. 安排工作以達到最大收益
題意:
你有
n
個工作和m
個工人。給定三個陣列:difficulty
,profit
和worker
,其中:
difficulty[i]
表示第i
個工作的難度,profit[i]
表示第i
個工作的收益。worker[i]
是第i
個工人的能力,即該工人只能完成難度小於等於worker[i]
的工作。每個工人 最多 只能安排 一個 工作,但是一個工作可以 完成多次 。
- 舉個例子,如果 3 個工人都嘗試完成一份報酬為
$1
的同樣工作,那麼總收益為$3
。如果一個工人不能完成任何工作,他的收益為$0
。返回 在把工人分配到工作崗位後,我們所能獲得的最大利潤 。
2024年5月18日
【leetcode】2644. 找出可整除性得分最大的整數
題意:
給你兩個下標從 0 開始的整數陣列
nums
和divisors
。
divisors[i]
的 可整除性得分 等於滿足nums[j]
能被divisors[i]
整除的下標j
的數量。返回 可整除性得分 最大的整數
divisors[i]
。如果有多個整數具有最大得分,則返回數值最小的一個。
2024年5月19日
【leetcode】1535. 找出陣列遊戲的贏家
題意:
給你一個由 不同 整陣列成的整數陣列
arr
和一個整數k
。每回合遊戲都在陣列的前兩個元素(即
arr[0]
和arr[1]
)之間進行。比較arr[0]
與arr[1]
的大小,較大的整數將會取得這一回合的勝利並保留在位置0
,較小的整數移至陣列的末尾。當一個整數贏得k
個連續回合時,遊戲結束,該整數就是比賽的 贏家 。返回贏得比賽的整數。
題目資料 保證 遊戲存在贏家。
2024年5月20日
【leetcode】88. 合併兩個有序陣列
題意:
給你兩個按 非遞減順序 排列的整數陣列
nums1
和nums2
,另有兩個整數m
和n
,分別表示nums1
和nums2
中的元素數目。請你 合併
nums2
到nums1
中,使合併後的陣列同樣按 非遞減順序 排列。注意:最終,合併後陣列不應由函式返回,而是儲存在陣列
nums1
中。為了應對這種情況,nums1
的初始長度為m + n
,其中前m
個元素表示應合併的元素,後n
個元素為0
,應忽略。nums2
的長度為n
。
【leetcode】27. 移除元素
題意:
給你一個陣列
nums
和一個值val
,你需要 原地 移除所有數值等於val
的元素。元素的順序可能發生改變。然後返回nums
中與val
不同的元素的數量。假設
nums
中不等於val
的元素數量為k
,要透過此題,您需要執行以下操作:
- 更改
nums
陣列,使nums
的前k
個元素包含不等於val
的元素。nums
的其餘元素和nums
的大小並不重要。- 返回
k
。
【leetcode】26. 刪除有序陣列中的重複項
題意:
給你一個 非嚴格遞增排列 的陣列
nums
,請你 原地 刪除重複出現的元素,使每個元素 只出現一次 ,返回刪除後陣列的新長度。元素的 相對順序 應該保持 一致 。然後返回nums
中唯一元素的個數。考慮
nums
的唯一元素的數量為k
,你需要做以下事情確保你的題解可以被透過:
- 更改陣列
nums
,使nums
的前k
個元素包含唯一元素,並按照它們最初在nums
中出現的順序排列。nums
的其餘元素與nums
的大小不重要。- 返回
k
。
【leetcode】80. 刪除有序陣列中的重複項 II
題意:
給你一個有序陣列
nums
,請你 原地 刪除重複出現的元素,使得出現次數超過兩次的元素只出現兩次 ,返回刪除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地修改輸入陣列 並在使用 O(1) 額外空間的條件下完成。
2024年5月21日
【leetcode】2769. 找出最大的可達成數字
題意:
給你兩個整數
num
和t
。如果整數
x
可以在執行下述操作不超過t
次的情況下變為與num
相等,則稱其為 可達成數字 :
- 每次操作將
x
的值增加或減少1
,同時可以選擇將num
的值增加或減少1
。返回所有可達成數字中的最大值。可以證明至少存在一個可達成數字。
2024年5月22日
【leetcode】2225. 找出輸掉零場或一場比賽的玩家
題意:
給你一個整數陣列
matches
其中matches[i] = [winner_i, loser_i]
表示在一場比賽中winner_i
擊敗了loser_i
。返回一個長度為 2 的列表
answer
:
answer[0]
是所有 沒有 輸掉任何比賽的玩家列表。answer[1]
是所有恰好輸掉 一場 比賽的玩家列表。兩個列表中的值都應該按 遞增 順序返回。
注意:
- 只考慮那些參與 至少一場 比賽的玩家。
- 生成的測試用例保證 不存在 兩場比賽結果 相同 。
2024年5月23日
【leetcode】2831. 找出最長等值子陣列
題意:
給你一個下標從 0 開始的整數陣列
nums
和一個整數k
。如果子陣列中所有元素都相等,則認為子陣列是一個 等值子陣列 。注意,空陣列是 等值子陣列 。
從
nums
中刪除最多k
個元素後,返回可能的最長等值子陣列的長度。子陣列 是陣列中一個連續且可能為空的元素序列。
2024年5月24日
【leetcode】1673. 找出最具競爭力的子序列
題意:
給你一個整數陣列
nums
和一個正整數k
,返回長度為k
且最具 競爭力 的nums
子序列。陣列的子序列是從陣列中刪除一些元素(可能不刪除元素)得到的序列。
在子序列
a
和子序列b
第一個不相同的位置上,如果a
中的數字小於b
中對應的數字,那麼我們稱子序列a
比子序列b
(相同長度下)更具 競爭力 。 例如,[1,3,4]
比[1,3,5]
更具競爭力,在第一個不相同的位置,也就是最後一個位置上,4
小於5
。
2024年5月25日
【leetcode】2903. 找出滿足差值條件的下標 I
題意:
給你一個下標從 0 開始、長度為
n
的整數陣列nums
,以及整數indexDifference
和整數valueDifference
。你的任務是從範圍
[0, n - 1]
內找出 2 個滿足下述所有條件的下標i
和j
:
abs(i - j) >= indexDifference
且abs(nums[i] - nums[j]) >= valueDifference
返回整數陣列
answer
。如果存在滿足題目要求的兩個下標,則answer = [i, j]
;否則,answer = [-1, -1]
。如果存在多組可供選擇的下標對,只需要返回其中任意一組即可。注意:
i
和j
可能 相等 。
2024年5月26日
【leetcode】1738. 找出第 K 大的異或座標值
題意:
給你一個二維矩陣
matrix
和一個整數k
,矩陣大小為m x n
由非負整陣列成。矩陣中座標
(a, b)
的 值 可由對所有滿足0 <= i <= a < m
且0 <= j <= b < n
的元素matrix[i][j]
(下標從 0 開始計數)執行異或運算得到。請你找出
matrix
的所有座標中第k
大的值(k
的值從 1 開始計數)。
2024年5月27日
【leetcode】2028. 找出缺失的觀測資料
題意:
現有一份
n + m
次投擲單個 六面 骰子的觀測資料,骰子的每個面從1
到6
編號。觀測資料中缺失了n
份,你手上只拿到剩餘m
次投擲的資料。幸好你有之前計算過的這n + m
次投擲資料的 平均值 。給你一個長度為
m
的整數陣列rolls
,其中rolls[i]
是第i
次觀測的值。同時給你兩個整數mean
和n
。返回一個長度為
n
的陣列,包含所有缺失的觀測資料,且滿足這n + m
次投擲的 平均值 是mean
。如果存在多組符合要求的答案,只需要返回其中任意一組即可。如果不存在答案,返回一個空陣列。
k
個數字的 平均值 為這些數字求和後再除以k
。注意
mean
是一個整數,所以n + m
次投擲的總和需要被n + m
整除。
2024年5月28日
【leetcode】2951. 找出峰值
題意:
給你一個下標從 0 開始的陣列
mountain
。你的任務是找出陣列mountain
中的所有 峰值。以陣列形式返回給定陣列中 峰值 的下標,順序不限 。
注意:
- 峰值 是指一個嚴格大於其相鄰元素的元素。
- 陣列的第一個和最後一個元素 不 是峰值。
2024年5月29日
【leetcode】2981. 找出出現至少三次的最長特殊子字串 I
題意:
給你一個僅由小寫英文字母組成的字串
s
。如果一個字串僅由單一字元組成,那麼它被稱為 特殊 字串。例如,字串
"abc"
不是特殊字串,而字串"ddd"
、"zz"
和"f"
是特殊字串。返回在
s
中出現 至少三次 的 最長特殊子字串 的長度,如果不存在出現至少三次的特殊子字串,則返回-1
。子字串 是字串中的一個連續 非空 字元序列。
2024年5月30日
【leetcode】2982. 找出出現至少三次的最長特殊子字串 II
題意:
給你一個僅由小寫英文字母組成的字串
s
。如果一個字串僅由單一字元組成,那麼它被稱為 特殊 字串。例如,字串
"abc"
不是特殊字串,而字串"ddd"
、"zz"
和"f"
是特殊字串。返回在
s
中出現 至少三次 的 最長特殊子字串 的長度,如果不存在出現至少三次的特殊子字串,則返回-1
。子字串 是字串中的一個連續 非空 字元序列。
2024年5月31日
【leetcode】2965. 找出缺失和重複的數字
題意:
給你一個下標從 0 開始的二維整數矩陣
grid
,大小為n * n
,其中的值在[1, n2]
範圍內。除了a
出現 兩次,b
缺失 之外,每個整數都 恰好出現一次 。任務是找出重複的數字
a
和缺失的數字b
。返回一個下標從 0 開始、長度為
2
的整數陣列ans
,其中ans[0]
等於a
,ans[1]
等於b
。