2024年5月刷題記錄

jiamian22發表於2024-08-01

2024年5月1日

【leetcode】2462. 僱傭 K 位工人的總代價

題意:

給你一個下標從 0 開始的整數陣列 costs ,其中 costs[i] 是僱傭第 i 位工人的代價。

同時給你兩個整數 kcandidates 。我們想根據以下規則恰好僱傭 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 名工人。 給定兩個陣列 qualitywage ,其中,quality[i] 表示第 i 名工人的工作質量,其最低期望工資為 wage[i]

現在我們想僱傭 k 名工人組成一個工資組。在僱傭 一組 k 名工人時,我們必須按照下述規則向他們支付工資:

  1. 對工資組中的每名工人,應當按其工作質量與同組其他工人的工作質量的比例來支付工資。
  2. 工資組中的每名工人至少應當得到他們的最低期望工資。

給定整數 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. 相同的樹

題意:

給你兩棵二叉樹的根節點 pq ,編寫一個函式來檢驗這兩棵樹是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。




2024年5月8日

【leetcode】2079. 給植物澆水

題意:

你打算用一個水罐給花園裡的 n 株植物澆水。植物排成一行,從左到右進行標記,編號從 0n - 1 。其中,第 i 株植物的位置是 x = ix = -1 處有一條河,你可以在那裡重新灌滿你的水罐。

每一株植物都需要澆特定量的水。你將會按下面描述的方式完成澆水:

  • 按從左到右的順序給植物澆水。
  • 在給當前植物澆完水之後,如果你沒有足夠的水 完全 澆灌下一株植物,那麼你就需要返回河邊重新裝滿水罐。
  • 不能 提前重新灌滿水罐。

最初,你在河邊(也就是,x = -1),在 x 軸上每移動 一個單位 都需要 一步

給你一個下標從 0 開始的整數陣列 plants ,陣列由 n 個整陣列成。其中,plants[i] 為第 i 株植物需要的水量。另有一個整數 capacity 表示水罐的容量,返回澆灌所有植物需要的 步數




2024年5月9日

【leetcode】2105. 給植物澆水 II

題意:

Alice 和 Bob 打算給花園裡的 n 株植物澆水。植物排成一行,從左到右進行標記,編號從 0n - 1 。其中,第 i 株植物的位置是 x = i

每一株植物都需要澆特定量的水。Alice 和 Bob 每人有一個水罐,最初是滿的 。他們按下面描述的方式完成澆水:

  • Alice 按 從左到右 的順序給植物澆水,從植物 0 開始。Bob 按 從右到左 的順序給植物澆水,從植物 n - 1 開始。他們 同時 給植物澆水。
  • 無論需要多少水,為每株植物澆水所需的時間都是相同的。
  • 如果 Alice/Bob 水罐中的水足以 完全 灌溉植物,他們 必須 給植物澆水。否則,他們 首先(立即)重新裝滿罐子,然後給植物澆水。
  • 如果 Alice 和 Bob 到達同一株植物,那麼當前水罐中水 更多 的人會給這株植物澆水。如果他倆水量相同,那麼 Alice 會給這株植物澆水。

給你一個下標從 0 開始的整數陣列 plants ,陣列由 n 個整陣列成。其中,plants[i] 為第 i 株植物需要的水量。另有兩個整數 capacityAcapacityB 分別表示 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 個專案,編號從 0n - 1 。同時給你一個整數陣列 milestones ,其中每個 milestones[i] 表示第 i 個專案中的階段任務數量。

你可以按下面兩個規則參與專案中的工作:

  • 每週,你將會完成 某一個 專案中的 恰好一個 階段任務。你每週都 必須 工作。
  • 連續的 兩週中,你 不能 參與並完成同一個專案中的兩個階段任務。

一旦所有專案中的全部階段任務都完成,或者僅剩餘一個階段任務都會導致你違反上面的規則,那麼你將 停止工作 。注意,由於這些條件的限制,你可能無法完成所有階段任務。

返回在不違反上面規則的情況下你 最多 能工作多少周。




2024年5月17日

【leetcode】826. 安排工作以達到最大收益

題意:

你有 n 個工作和 m 個工人。給定三個陣列: difficulty, profitworker ,其中:

  • difficulty[i] 表示第 i 個工作的難度,profit[i] 表示第 i 個工作的收益。
  • worker[i] 是第 i 個工人的能力,即該工人只能完成難度小於等於 worker[i] 的工作。

每個工人 最多 只能安排 一個 工作,但是一個工作可以 完成多次

  • 舉個例子,如果 3 個工人都嘗試完成一份報酬為 $1 的同樣工作,那麼總收益為 $3 。如果一個工人不能完成任何工作,他的收益為 $0

返回 在把工人分配到工作崗位後,我們所能獲得的最大利潤




2024年5月18日

【leetcode】2644. 找出可整除性得分最大的整數

題意:

給你兩個下標從 0 開始的整數陣列 numsdivisors

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. 合併兩個有序陣列

題意:

給你兩個按 非遞減順序 排列的整數陣列 nums1nums2,另有兩個整數 mn ,分別表示 nums1nums2 中的元素數目。

請你 合併 nums2nums1 中,使合併後的陣列同樣按 非遞減順序 排列。

注意:最終,合併後陣列不應由函式返回,而是儲存在陣列 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. 找出最大的可達成數字

題意:

給你兩個整數 numt

如果整數 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 個滿足下述所有條件的下標 ij

  • abs(i - j) >= indexDifference
  • abs(nums[i] - nums[j]) >= valueDifference

返回整數陣列 answer。如果存在滿足題目要求的兩個下標,則 answer = [i, j] ;否則,answer = [-1, -1] 。如果存在多組可供選擇的下標對,只需要返回其中任意一組即可。

注意:ij 可能 相等




2024年5月26日

【leetcode】1738. 找出第 K 大的異或座標值

題意:

給你一個二維矩陣 matrix 和一個整數 k ,矩陣大小為 m x n 由非負整陣列成。

矩陣中座標 (a, b) 可由對所有滿足 0 <= i <= a < m0 <= j <= b < n 的元素 matrix[i][j]下標從 0 開始計數)執行異或運算得到。

請你找出 matrix 的所有座標中第 k 大的值(k 的值從 1 開始計數)。




2024年5月27日

【leetcode】2028. 找出缺失的觀測資料

題意:

現有一份 n + m 次投擲單個 六面 骰子的觀測資料,骰子的每個面從 16 編號。觀測資料中缺失了 n 份,你手上只拿到剩餘 m 次投擲的資料。幸好你有之前計算過的這 n + m 次投擲資料的 平均值

給你一個長度為 m 的整數陣列 rolls ,其中 rolls[i] 是第 i 次觀測的值。同時給你兩個整數 meann

返回一個長度為 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] 等於 aans[1] 等於 b