2024年7月刷題記錄

jiamian22發表於2024-08-01

2024年7月1日

【leetcode】494. 目標和

題意:

給你一個非負整數陣列 nums 和一個整數 target

向陣列中的每個整數前新增 '+''-' ,然後串聯起所有整數,可以構造一個 表示式

  • 例如,nums = [2, 1] ,可以在 2 之前新增 '+' ,在 1 之前新增 '-' ,然後串聯起來得到表示式 "+2-1"

返回可以透過上述方法構造的、運算結果等於 target 的不同 表示式 的數目。




2024年7月2日

【leetcode】392. 判斷子序列

題意:

給定字串 st ,判斷 s 是否為 t 的子序列。

字串的一個子序列是原始字串刪除一些(也可以不刪除)字元而不改變剩餘字元相對位置形成的新字串。(例如,"ace""abcde"的一個子序列,而"aec"不是)。

進階:

如果有大量輸入的 S,稱作 S1, S2, ... , Sk 其中 k >= 10億,你需要依次檢查它們是否為 T 的子序列。在這種情況下,你會怎樣改變程式碼?




2024年7月3日

【leetcode】3115. 質數的最大距離

題意:

給你一個整數陣列 nums

返回兩個(不一定不同的)質數在 nums下標最大距離




2024年7月4日

【leetcode】3099. 哈沙德數

題意:

如果一個整數能夠被其各個數位上的數字之和整除,則稱之為 哈沙德數(Harshad number)。給你一個整數 x 。如果 x哈沙德數 ,則返回 x 各個數位上的數字之和,否則,返回 -1




2024年7月5日

【leetcode】3033. 修改矩陣

題意:

給你一個下標從 0 開始、大小為 m x n 的整數矩陣 matrix ,新建一個下標從 0 開始、名為 answer 的矩陣。使 answermatrix 相等,接著將其中每個值為 -1 的元素替換為所在列的 最大 元素。

返回矩陣 answer




2024年7月6日

【leetcode】3101. 交替子陣列計數

題意:

給你一個二進位制陣列 nums

如果一個子陣列中 不存在 兩個 相鄰 元素的值 相同 的情況,我們稱這樣的子陣列為 交替子陣列

返回陣列 nums 中交替子陣列的數量。




2024年7月7日

【leetcode】1958. 檢查操作是否合法

題意:

給你一個下標從 0 開始的 8 x 8 網格 board ,其中 board[r][c] 表示遊戲棋盤上的格子 (r, c) 。棋盤上空格用 '.' 表示,白色格子用 'W' 表示,黑色格子用 'B' 表示。

遊戲中每次操作步驟為:選擇一個空格子,將它變成你正在執行的顏色(要麼白色,要麼黑色)。但是,合法 操作必須滿足:塗色後這個格子是 好線段的一個端點 (好線段可以是水平的,豎直的或者是對角線)。

好線段 指的是一個包含 三個或者更多格子(包含端點格子)的線段,線段兩個端點格子為 同一種顏色 ,且中間剩餘格子的顏色都為 另一種顏色 (線段上不能有任何空格子)。

給你兩個整數 rMovecMove 以及一個字元 color ,表示你正在執行操作的顏色(白或者黑),如果將格子 (rMove, cMove) 變成顏色 color 後,是一個 合法 操作,那麼返回 true ,如果不是合法操作返回 false




2024年7月8日

【leetcode】724. 尋找陣列的中心下標

題意:

給你一個整數陣列 nums ,請計算陣列的 中心下標

陣列 中心下標 是陣列的一個下標,其左側所有元素相加的和等於右側所有元素相加的和。

如果中心下標位於陣列最左端,那麼左側數之和視為 0 ,因為在下標的左側不存在元素。這一點對於中心下標位於陣列最右端同樣適用。

如果陣列有多箇中心下標,應該返回 最靠近左邊 的那一個。如果陣列不存在中心下標,返回 -1




2024年7月9日

【leetcode】205. 同構字串

題意:

給定兩個字串 st ,判斷它們是否是同構的。

如果 s 中的字元可以按某種對映關係替換得到 t ,那麼這兩個字串是同構的。

每個出現的字元都應當對映到另一個字元,同時不改變字元的順序。不同字元不能對映到同一個字元上,相同字元只能對映到同一個字元上,字元可以對映到自己本身。




2024年7月10日

【leetcode】290. 單詞規律

題意:

給定一種規律 pattern 和一個字串 s ,判斷 s 是否遵循相同的規律。

這裡的 遵循 指完全匹配,例如, pattern 裡的每個字母和字串 s 中的每個非空單詞之間存在著雙向連線的對應規律。




2024年7月11日

【leetcode】242. 有效的字母異位詞

題意:

給定兩個字串 st ,編寫一個函式來判斷 t 是否是 s 的字母異位詞。

注意:st 中每個字元出現的次數都相同,則稱 st 互為字母異位詞。




2024年7月12日

【leetcode】2974. 最小數字遊戲

題意:

你有一個下標從 0 開始、長度為 偶數 的整數陣列 nums ,同時還有一個空陣列 arr 。Alice 和 Bob 決定玩一個遊戲,遊戲中每一輪 Alice 和 Bob 都會各自執行一次操作。遊戲規則如下:

  • 每一輪,Alice 先從 nums 中移除一個 最小 元素,然後 Bob 執行同樣的操作。
  • 接著,Bob 會將移除的元素新增到陣列 arr 中,然後 Alice 也執行同樣的操作。
  • 遊戲持續進行,直到 nums 變為空。

返回結果陣列 arr




2024年7月13日

【leetcode】3011. 判斷一個陣列是否可以變為有序

題意:

給你一個下標從 0 開始且全是 整數的陣列 nums

一次 操作 中,如果兩個 相鄰 元素在二進位制下數位為 1 的數目 相同 ,那麼你可以將這兩個元素交換。你可以執行這個操作 任意次也可以 0 次)。

如果你可以使陣列變有序,請你返回 true ,否則返回 false




2024年7月14日

【leetcode】807. 保持城市天際線

題意:

給你一座由 n x n 個街區組成的城市,每個街區都包含一座立方體建築。給你一個下標從 0 開始的 n x n 整數矩陣 grid ,其中 grid[r][c] 表示坐落於 rc 列的建築物的 高度

城市的 天際線 是從遠處觀察城市時,所有建築物形成的外部輪廓。從東、南、西、北四個主要方向觀測到的 天際線 可能不同。

我們被允許為 任意數量的建築物 的高度增加 任意增量(不同建築物的增量可能不同) 。 高度為 0 的建築物的高度也可以增加。然而,增加的建築物高度 不能影響 從任何主要方向觀察城市得到的 天際線

不改變 從任何主要方向觀測到的城市 天際線 的前提下,返回建築物可以增加的 最大高度增量總和




2024年7月15日

【leetcode】721. 賬戶合併

題意:

給定一個列表 accounts,每個元素 accounts[i] 是一個字串列表,其中第一個元素 accounts[i][0]名稱 (name),其餘元素是 emails 表示該賬戶的郵箱地址。

現在,我們想合併這些賬戶。如果兩個賬戶都有一些共同的郵箱地址,則兩個賬戶必定屬於同一個人。請注意,即使兩個賬戶具有相同的名稱,它們也可能屬於不同的人,因為人們可能具有相同的名稱。一個人最初可以擁有任意數量的賬戶,但其所有賬戶都具有相同的名稱。

合併賬戶後,按以下格式返回賬戶:每個賬戶的第一個元素是名稱,其餘元素是 按字元 ASCII 順序排列 的郵箱地址。賬戶本身可以以 任意順序 返回。




2024年7月16日

【leetcode】2956. 找到兩個陣列中的公共元素

題意:

給你兩個下標從 0 開始的整數陣列 nums1nums2 ,它們分別含有 nm 個元素。請你計算以下兩個數值:

  • answer1:使得 nums1[i]nums2 中出現的下標 i 的數量。
  • answer2:使得 nums2[i]nums1 中出現的下標 i 的數量。

返回 [answer1, answer2]




2024年7月17日

【leetcode】49. 字母異位詞分組

題意:

給你一個字串陣列,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。

字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。




2024年7月18日

【leetcode】3112. 訪問消失節點的最少時間

題意:

給你一個二維陣列 edges 表示一個 n 個點的無向圖,其中 edges[i] = [ui, vi, lengthi] 表示節點 ui 和節點 vi 之間有一條需要 lengthi 單位時間透過的無向邊。

同時給你一個陣列 disappear ,其中 disappear[i] 表示節點 i 從圖中消失的時間點,在那一刻及以後,你無法再訪問這個節點。

注意,圖有可能一開始是不連通的,兩個節點之間也可能有多條邊。

請你返回陣列 answeranswer[i] 表示從節點 0 到節點 i 需要的 最少 單位時間。如果從節點 0 出發 無法 到達節點 i ,那麼 answer[i]-1




2024年7月19日

【leetcode】3096. 得到更多分數的最少關卡數目

題意:

給你一個長度為 n 的二進位制陣列 possible

Alice 和 Bob 正在玩一個有 n 個關卡的遊戲,遊戲中有一些關卡是 困難 模式,其他的關卡是 簡單 模式。如果 possible[i] == 0 ,那麼第 i 個關卡是 困難 模式。一個玩家透過一個簡單模式的關卡可以獲得 1 分,透過困難模式的關卡將失去 1 分。

遊戲的一開始,Alice 將從第 0 級開始 按順序 完成一些關卡,然後 Bob 會完成剩下的所有關卡。

假設兩名玩家都採取最優策略,目的是 最大化 自己的得分,Alice 想知道自己 最少 需要完成多少個關卡,才能獲得比 Bob 更多的分數。

請你返回 Alice 獲得比 Bob 更多的分數所需要完成的 最少 關卡數目,如果 無法 達成,那麼返回 -1

注意,每個玩家都至少需要完成 1 個關卡。




2024年7月20日

【leetcode】2850. 將石頭分散到網格圖的最少移動次數

題意:

給你一個大小為 3 * 3 ,下標從 0 開始的二維整數矩陣 grid ,分別表示每一個格子裡石頭的數目。網格圖中總共恰好有 9 個石頭,一個格子裡可能會有 多個 石頭。

每一次操作中,你可以將一個石頭從它當前所在格子移動到一個至少有一條公共邊的相鄰格子。

請你返回每個格子恰好有一個石頭的 最少移動次數




2024年7月21日

【leetcode】1186. 刪除一次得到子陣列最大和

題意:

給你一個整數陣列,返回它的某個 非空 子陣列(連續元素)在執行一次可選的刪除操作後,所能得到的最大元素總和。換句話說,你可以從原陣列中選出一個子陣列,並可以決定要不要從中刪除一個元素(只能刪一次哦),(刪除後)子陣列中至少應當有一個元素,然後該子陣列(剩下)的元素總和是所有子陣列之中最大的。

注意,刪除一個元素後,子陣列 不能為空




2024年7月22日

【leetcode】2101. 引爆最多的炸彈

題意:

給你一個炸彈列表。一個炸彈的 爆炸範圍 定義為以炸彈為圓心的一個圓。

炸彈用一個下標從 0 開始的二維整數陣列 bombs 表示,其中 bombs[i] = [xi, yi, ri]xiyi 表示第 i 個炸彈的 X 和 Y 座標,ri 表示爆炸範圍的 半徑

你需要選擇引爆 一個 炸彈。當這個炸彈被引爆時,所有 在它爆炸範圍內的炸彈都會被引爆,這些炸彈會進一步將它們爆炸範圍內的其他炸彈引爆。

給你陣列 bombs ,請你返回在引爆 一個 炸彈的前提下,最多 能引爆的炸彈數目。




2024年7月23日

【leetcode】122. 買賣股票的最佳時機 II

題意:

給你一個整數陣列 prices ,其中 prices[i] 表示某支股票第 i 天的價格。

在每一天,你可以決定是否購買和/或出售股票。你在任何時候 最多 只能持有 一股 股票。你也可以先購買,然後在 同一天 出售。

返回 你能獲得的 最大 利潤




【leetcode】123. 買賣股票的最佳時機 III

題意:

給定一個陣列,它的第 i 個元素是一支給定的股票在第 i 天的價格。

設計一個演算法來計算你所能獲取的最大利潤。你最多可以完成 兩筆 交易。

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。




【leetcode】188. 買賣股票的最佳時機 IV

題意:

給你一個整數陣列 prices 和一個整數 k ,其中 prices[i] 是某支給定的股票在第 i 天的價格。

設計一個演算法來計算你所能獲取的最大利潤。你最多可以完成 k 筆交易。也就是說,你最多可以買 k 次,賣 k 次。

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。




2024年7月24日

【leetcode】2766. 重新放置石塊

題意:

給你一個下標從 0 開始的整數陣列 nums ,表示一些石塊的初始位置。再給你兩個長度 相等 下標從 0 開始的整數陣列 moveFrommoveTo

moveFrom.length 次操作內,你可以改變石塊的位置。在第 i 次操作中,你將位置在 moveFrom[i] 的所有石塊移到位置 moveTo[i]

完成這些操作後,請你按升序返回所有 石塊的位置。

注意:

  • 如果一個位置至少有一個石塊,我們稱這個位置 石塊。
  • 一個位置可能會有多個石塊。



2024年7月25日

【leetcode】2844. 生成特殊數字的最少操作

題意:

給你一個下標從 0 開始的字串 num ,表示一個非負整數。

在一次操作中,您可以選擇 num 的任意一位數字並將其刪除。請注意,如果你刪除 num 中的所有數字,則 num 變為 0

返回最少需要多少次操作可以使 num 變成特殊數字。

如果整數 x 能被 25 整除,則該整數 x 被認為是特殊數字。




2024年7月26日

【leetcode】2740. 找出分割槽值

題意:

給你一個 整數陣列 nums

nums 分成兩個陣列:nums1nums2 ,並滿足下述條件:

  • 陣列 nums 中的每個元素都屬於陣列 nums1 或陣列 nums2
  • 兩個陣列都 非空
  • 分割槽值 最小

分割槽值的計算方法是 |max(nums1) - min(nums2)|

其中,max(nums1) 表示陣列 nums1 中的最大元素,min(nums2) 表示陣列 nums2 中的最小元素。

返回表示分割槽值的整數。




2024年7月27日

【leetcode】3106. 滿足距離約束且字典序最小的字串

題意:

給你一個字串 s 和一個整數 k

定義函式 distance(s1, s2) ,用於衡量兩個長度為 n 的字串 s1s2 之間的距離,即:

  • 字元 'a''z'迴圈 順序排列,對於區間 [0, n - 1] 中的 i ,計算所有「 s1[i]s2[i] 之間 最小距離」的

例如,distance("ab", "cd") == 4 ,且 distance("a", "z") == 1

你可以對字串 s 執行 任意次 操作。在每次操作中,可以將 s 中的一個字母 改變任意 其他小寫英文字母。

返回一個字串,表示在執行一些操作後你可以得到的 字典序最小 的字串 t ,且滿足 distance(s, t) <= k




2024年7月28日

【leetcode】202. 快樂數

題意:

編寫一個演算法來判斷一個數 n 是不是快樂數。

「快樂數」 定義為:

  • 對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和。
  • 然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。
  • 如果這個過程 結果為 1,那麼這個數就是快樂數。

如果 n快樂數 就返回 true ;不是,則返回 false




2024年7月29日

【leetcode】682. 棒球比賽

題意:

你現在是一場採用特殊賽制棒球比賽的記錄員。這場比賽由若干回合組成,過去幾回合的得分可能會影響以後幾回合的得分。

比賽開始時,記錄是空白的。你會得到一個記錄操作的字串列表 ops,其中 ops[i] 是你需要記錄的第 i 項操作,ops 遵循下述規則:

  1. 整數 x - 表示本回合新獲得分數 x
  2. "+" - 表示本回合新獲得的得分是前兩次得分的總和。題目資料保證記錄此操作時前面總是存在兩個有效的分數。
  3. "D" - 表示本回合新獲得的得分是前一次得分的兩倍。題目資料保證記錄此操作時前面總是存在一個有效的分數。
  4. "C" - 表示前一次得分無效,將其從記錄中移除。題目資料保證記錄此操作時前面總是存在一個有效的分數。

請你返回記錄中所有得分的總和。




2024年7月30日

【leetcode】2961. 雙模冪運算

題意:

給你一個下標從 0 開始的二維陣列 variables ,其中 variables[i] = [a_i, b_i, c_i, m_i],以及一個整數 target

如果滿足以下公式,則下標 i好下標

  • 0 <= i < variables.length
  • ((a_i^(b_i) % 10)^(c_i)) % m_i == target

返回一個由 好下標 組成的陣列,順序不限




2024年7月31日

【leetcode】3111. 覆蓋所有點的最少矩形數目

題意:

給你一個二維整數陣列 point ,其中 points[i] = [xi, yi] 表示二維平面內的一個點。同時給你一個整數 w 。你需要用矩形 覆蓋所有 點。

每個矩形的左下角在某個點 (x1, 0) 處,且右上角在某個點 (x2, y2) 處,其中 x1 <= x2y2 >= 0 ,同時對於每個矩形都 必須 滿足 x2 - x1 <= w

如果一個點在矩形內或者在邊上,我們說這個點被矩形覆蓋了。

請你在確保每個點都 至少 被一個矩形覆蓋的前提下,最少 需要多少個矩形。

注意:一個點可以被多個矩形覆蓋。