2024年1月刷題記錄

jiamian22發表於2024-08-01

2024年1月1日

【leetcode】1599. 經營摩天輪的最大利潤

題意:

你正在經營一座摩天輪,該摩天輪共有 4 個座艙 ,每個座艙 最多可以容納 4 位遊客 。你可以 逆時針 輪轉座艙,但每次輪轉都需要支付一定的執行成本 runningCost 。摩天輪每次輪轉都恰好轉動 1 / 4 周。

給你一個長度為 n 的陣列 customerscustomers[i] 是在第 i 次輪轉(下標從 0 開始)之前到達的新遊客的數量。這也意味著你必須在新遊客到來前輪轉 i 次。每位遊客在登上離地面最近的座艙前都會支付登艙成本 boardingCost ,一旦該座艙再次抵達地面,他們就會離開座艙結束遊玩。

你可以隨時停下摩天輪,即便是 在服務所有遊客之前 。如果你決定停止運營摩天輪,為了保證所有遊客安全著陸,將免費進行所有後續輪轉。注意,如果有超過 4 位遊客在等摩天輪,那麼只有 4 位遊客可以登上摩天輪,其餘的需要等待 下一次輪轉

返回最大化利潤所需執行的 最小輪轉次數 。 如果不存在利潤為正的方案,則返回 -1




2024年1月2日

【leetcode】466. 統計重複個數

題意:

定義 str = [s, n] 表示 strn 個字串 s 連線構成。

  • 例如,str == ["abc", 3] =="abcabcabc"

如果可以從 s2 中刪除某些字元使其變為 s1,則稱字串 s1 可以從字串 s2 獲得。

  • 例如,根據定義,s1 = "abc" 可以從 s2 = "ab*dbe*c" 獲得,僅需要刪除加粗且用斜體標識的字元。

現在給你兩個字串 s1s2 和兩個整數 n1n2 。由此構造得到兩個字串,其中 str1 = [s1, n1]str2 = [s2, n2]

請你找出一個最大整數 m ,以滿足 str = [str2, m] 可以從 str1 獲得。




2024年1月3日

【leetcode】2487. 從連結串列中移除節點

題意:

給你一個連結串列的頭節點 head

移除每個右側有一個更大數值的節點。

返回修改後連結串列的頭節點 head




2024年1月4日

【leetcode】2397. 被列覆蓋的最多行數

題意:

給你一個下標從 0 開始、大小為 m x n 的二進位制矩陣 matrix ;另給你一個整數 numSelect,表示你必須從 matrix 中選擇的 不同 列的數量。

如果一行中所有的 1 都被你選中的列所覆蓋,則認為這一行被 覆蓋 了。

形式上,假設 s = {c1, c2, ...., cnumSelect} 是你選擇的列的集合。對於矩陣中的某一行 row ,如果滿足下述條件,則認為這一行被集合 s 覆蓋

  • 對於滿足 matrix[row][col] == 1 的每個單元格 matrix[row][col]0 <= col <= n - 1),col 均存在於 s 中,或者
  • row不存在 值為 1 的單元格。

你需要從矩陣中選出 numSelect 個列,使集合覆蓋的行數最大化。

返回一個整數,表示可以由 numSelect 列構成的集合 覆蓋最大行數




2024年1月5日

【leetcode】1944. 佇列中可以看到的人數

題意:

n 個人排成一個佇列,從左到右 編號為 0n - 1 。給你以一個整數陣列 heights ,每個整數 互不相同heights[i] 表示第 i 個人的高度。

一個人能 看到 他右邊另一個人的條件是這兩人之間的所有人都比他們兩人 。更正式的,第 i 個人能看到第 j 個人的條件是 i < jmin(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1])

請你返回一個長度為 n 的陣列 answer ,其中 answer[i] 是第 i 個人在他右側佇列中能 看到人數




2024年1月6日

【leetcode】2807. 在連結串列中插入最大公約數

題意:

給你一個連結串列的頭 head ,每個結點包含一個整數值。

在相鄰結點之間,請你插入一個新的結點,結點值為這兩個相鄰結點值的 最大公約數

請你返回插入之後的連結串列。

兩個數的 最大公約數 是可以被兩個數字整除的最大正整數。




2024年1月7日

【leetcode】383. 贖金信

題意:

給你兩個字串:ransomNotemagazine ,判斷 ransomNote 能不能由 magazine 裡面的字元構成。

如果可以,返回 true ;否則返回 false

magazine 中的每個字元只能在 ransomNote 中使用一次。




2024年1月8日

【leetcode】447. 迴旋鏢的數量

題意:

給定平面上 n互不相同 的點 points ,其中 points[i] = [xi, yi]迴旋鏢 是由點 (i, j, k) 表示的元組 ,其中 ij 之間的距離和 ik 之間的歐式距離相等(需要考慮元組的順序)。

返回平面上所有迴旋鏢的數量。




2024年1月9日

【leetcode】2707. 字串中的額外字元

題意:

給你一個下標從 0 開始的字串 s 和一個單詞字典 dictionary 。你需要將 s 分割成若干個 互不重疊 的子字串,每個子字串都在 dictionary 中出現過。s 中可能會有一些 額外的字元 不在任何子字串中。

請你採取最優策略分割 s ,使剩下的字元 最少




2024年1月10日

【leetcode】2696. 刪除子串後的字串最小長度

題意:

給你一個僅由 大寫 英文字元組成的字串 s

你可以對此字串執行一些操作,在每一步操作中,你可以從 s 中刪除 任一個 "AB""CD" 子字串。

透過執行操作,刪除所有 "AB""CD" 子串,返回可獲得的最終字串的 最小 可能長度。

注意,刪除子串後,重新連線出的字串可能會產生新的 "AB""CD" 子串。




2024年1月11日

【leetcode】2645. 構造有效字串的最少插入數

題意:

給你一個字串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母數。

如果字串可以由 "abc" 串聯多次得到,則認為該字串 有效




2024年1月12日

【leetcode】2085. 統計出現過一次的公共字串

題意:

給你兩個字串陣列 words1words2 ,請你返回在兩個字串陣列中 都恰好出現一次 的字串的數目。




2024年1月13日

【leetcode】2182. 構造限制重複的字串

題意:

給你一個字串 s 和一個整數 repeatLimit ,用 s 中的字元構造一個新字串 repeatLimitedString ,使任何字母 連續 出現的次數都不超過 repeatLimit 次。你不必使用 s 中的全部字元。

返回 字典序最大的 repeatLimitedString

如果在字串 ab 不同的第一個位置,字串 a 中的字母在字母表中出現時間比字串 b 對應的字母晚,則認為字串 a 比字串 b 字典序更大 。如果字串中前 min(a.length, b.length) 個字元都相同,那麼較長的字串字典序更大。




2024年1月14日

【leetcode】83. 刪除排序連結串列中的重複元素

題意:

給定一個已排序的連結串列的頭 head刪除所有重複的元素,使每個元素只出現一次 。返回 已排序的連結串列




2024年1月15日

【leetcode】82. 刪除排序連結串列中的重複元素 II

題意:

給定一個已排序的連結串列的頭 head刪除原始連結串列中所有重複數字的節點,只留下不同的數字 。返回 已排序的連結串列




【leetcode】203. 移除連結串列元素

題意:

給你一個連結串列的頭節點 head 和一個整數 val ,請你刪除連結串列中所有滿足 Node.val == val 的節點,並返回 新的頭節點




2024年1月16日

【leetcode】2719. 統計整數數目

題意:

給你兩個數字字串 num1num2 ,以及兩個整數 max_summin_sum 。如果一個整數 x 滿足以下條件,我們稱它是一個好整數:

  • num1 <= x <= num2
  • min_sum <= digit_sum(x) <= max_sum.

請你返回好整數的數目。答案可能很大,請返回答案對 109 + 7 取餘後的結果。

注意,digit_sum(x) 表示 x 各位數字之和。

【leetcode】2376. 統計特殊整數

題意:

給你兩個數字字串 num1num2 ,以及兩個整數 max_summin_sum 。如果一個整數 x 滿足以下條件,我們稱它是一個好整數:

  • num1 <= x <= num2
  • min_sum <= digit_sum(x) <= max_sum.

請你返回好整數的數目。答案可能很大,請返回答案對 109 + 7 取餘後的結果。

注意,digit_sum(x) 表示 x 各位數字之和。

【leetcode】1012. 至少有 1 位重複的數字

題意:

給定正整數 n,返回在 [1, n] 範圍內具有 至少 1 位 重複數字的正整數的個數。

【leetcode】902. 最大為 N 的數字組合

題意:

給你兩個數字字串 num1num2 ,以及兩個整數 max_summin_sum 。如果一個整數 x 滿足以下條件,我們稱它是一個好整數:

  • num1 <= x <= num2
  • min_sum <= digit_sum(x) <= max_sum.

請你返回好整數的數目。答案可能很大,請返回答案對 109 + 7 取餘後的結果。

注意,digit_sum(x) 表示 x 各位數字之和。

【leetcode】2999. 統計強大整數的數目

題意:

給你三個整數 startfinishlimit 。同時給你一個下標從 0 開始的字串 s ,表示一個 整數。

如果一個 整數 x 末尾部分是 s (換句話說,sx字尾),且 x 中的每個數位至多是 limit ,那麼我們稱 x強大的

請你返回區間 [start..finish] 內強大整數的 總數目

如果一個字串 xy 中某個下標開始(包括 0 ),到下標為 y.length - 1 結束的子字串,那麼我們稱 xy 的一個字尾。比方說,255125 的一個字尾,但不是 512 的字尾。




2024年1月17日

【leetcode】2744. 最大字串配對數目

題意:

給你一個下標從 0 開始的陣列 words ,陣列中包含 互不相同 的字串。

如果字串 words[i] 與字串 words[j] 滿足以下條件,我們稱它們可以匹配:

  • 字串 words[i] 等於 words[j] 的反轉字串。
  • 0 <= i < j < words.length

請你返回陣列 words 中的 最大 匹配數目。

注意,每個字串最多匹配一次。




2024年1月18日

【leetcode】233. 數字 1 的個數

題意:

給定一個整數 n,計算所有小於等於 n 的非負整數中數字 1 出現的個數。

【leetcode】2171. 拿出最少數目的魔法豆

題意:

給定一個 正整數 陣列 beans ,其中每個整數表示一個袋子裡裝的魔法豆的數目。

請你從每個袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少還有一顆 魔法豆的袋子)魔法豆的數目 相等。一旦把魔法豆從袋子中取出,你不能再將它放到任何袋子中。

請返回你需要拿出魔法豆的 最少數目




2024年1月19日

【leetcode】600. 不含連續1的非負整數

題意:

給定一個正整數 n ,請你統計在 [0, n] 範圍的非負整數中,有多少個整數的二進位制表示中不存在 連續的 1




2024年1月22日

【leetcode】670. 最大交換

題意:

給定一個非負整數,你至多可以交換一次數字中的任意兩位。返回你能得到的最大值。




2024年1月23日

【leetcode】2765. 最長交替子陣列

題意:

給你一個下標從 0 開始的整數陣列 nums 。如果 nums 中長度為 m 的子陣列 s 滿足以下條件,我們稱它是一個 交替子陣列

  • m 大於 1
  • s1 = s0 + 1
  • 下標從 0 開始的子陣列 s 與陣列 [s0, s1, s0, s1,...,s(m-1)%2] 一樣。也就是說,s1 - s0 = 1s2 - s1 = -1s3 - s2 = 1s4 - s3 = -1 ,以此類推,直到 s[m - 1] - s[m - 2] = (-1)^m

請你返回 nums 中所有 交替 子陣列中,最長的長度,如果不存在交替子陣列,請你返回 -1

子陣列是一個陣列中一段連續 非空 的元素序列。




2024年1月24日

【leetcode】2865. 美麗塔 I

題意:

給你一個長度為 n 下標從 0 開始的整數陣列 maxHeights

你的任務是在座標軸上建 n 座塔。第 i 座塔的下標為 i ,高度為 heights[i]

如果以下條件滿足,我們稱這些塔是 美麗 的:

  1. 1 <= heights[i] <= maxHeights[i]
  2. heights 是一個 山脈 陣列。

如果存在下標 i 滿足以下條件,那麼我們稱陣列 heights 是一個 山脈 陣列:

  • 對於所有 0 < j <= i ,都有 heights[j - 1] <= heights[j]
  • 對於所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k]

請你返回滿足 美麗塔 要求的方案中,高度和的最大值




2024年1月25日

【leetcode】2859. 計算 K 置位下標對應元素的和

題意:

給你一個下標從 0 開始的整數陣列 nums 和一個整數 k

請你用整數形式返回 nums 中的特定元素之 ,這些特定元素滿足:其對應下標的二進位制表示中恰存在 k 個置位。

整數的二進位制表示中的 1 就是這個整數的 置位

例如,21 的二進位制表示為 10101 ,其中有 3 個置位。




2024年1月26日

【leetcode】19. 刪除連結串列的倒數第 N 個結點

題意:

給你一個連結串列,刪除連結串列的倒數第 n 個結點,並且返回連結串列的頭結點。




2024年1月27日

【leetcode】2861. 最大合金數

題意:

假設你是一家合金製造公司的老闆,你的公司使用多種金屬來製造合金。現在共有 n 種不同型別的金屬可以使用,並且你可以使用 k 臺機器來製造合金。每臺機器都需要特定數量的每種金屬來建立合金。

對於第 i 臺機器而言,建立合金需要 composition[i][j]j 型別金屬。最初,你擁有 stock[i]i 型別金屬,而每購入一份 i 型別金屬需要花費 cost[i] 的金錢。

給你整數 nkbudget,下標從 1 開始的二維陣列 composition,兩個下標從 1 開始的陣列 stockcost,請你在預算不超過 budget 金錢的前提下,最大化 公司製造合金的數量。

所有合金都需要由同一臺機器製造。

返回公司可以製造的最大合金數。




2024年1月28日

【leetcode】365. 水壺問題

題意:

有兩個水壺,容量分別為 jug1Capacityjug2Capacity 升。水的供應是無限的。確定是否有可能使用這兩個壺準確得到 targetCapacity 升。

如果可以得到 targetCapacity 升水,最後請用以上水壺中的一或兩個來盛放取得的 targetCapacity 升水。

你可以:

  • 裝滿任意一個水壺
  • 清空任意一個水壺
  • 從一個水壺向另外一個水壺倒水,直到裝滿或者倒空



2024年1月30日

【leetcode】2808. 使迴圈陣列所有元素相等的最少秒數

題意:

給你一個下標從 0 開始長度為 n 的陣列 nums

每一秒,你可以對陣列執行以下操作:

  • 對於範圍在 [0, n - 1] 內的每一個下標 i ,將 nums[i] 替換成 nums[i]nums[(i - 1 + n) % n] 或者 nums[(i + 1) % n] 三者之一。

注意,所有元素會被同時替換。

請你返回將陣列 nums 中所有元素變成相等元素所需要的 最少 秒數。




2024年1月31日

【leetcode】2670. 找出不同元素數目差陣列

題意:

給你一個下標從 0 開始的陣列 nums ,陣列長度為 n

nums不同元素數目差 陣列可以用一個長度為 n 的陣列 diff 表示,其中 diff[i] 等於字首 nums[0, ..., i] 中不同元素的數目 減去 字尾 nums[i + 1, ..., n - 1] 中不同元素的數目。

返回 nums不同元素數目差 陣列。

注意 nums[i, ..., j] 表示 nums 的一個從下標 i 開始到下標 j 結束的子陣列(包含下標 ij 對應元素)。特別需要說明的是,如果 i > j ,則 nums[i, ..., j] 表示一個空子陣列。