2024年8月刷題記錄

jiamian22發表於2024-12-08

2024年8月1日

【leetcode】LCP 40. 心算挑戰

題意:

「力扣挑戰賽」心算專案的挑戰比賽中,要求選手從 N 張卡牌中選出 cnt 張卡牌,若這 cnt 張卡牌數字總和為偶數,則選手成績「有效」且得分為 cnt 張卡牌數字總和。 給定陣列 cardscnt,其中 cards[i] 表示第 i 張卡牌上的數字。 請幫參賽選手計算最大的有效得分。若不存在獲取有效得分的卡牌方案,則返回 0。




2024年8月2日

【leetcode】3128. 直角三角形

題意:

給你一個二維 boolean 矩陣 grid

請你返回使用 grid 中的 3 個元素可以構建的 直角三角形 數目,且滿足 3 個元素值 為 1 。

注意:

  • 如果 grid 中 3 個元素滿足:一個元素與另一個元素在 同一行,同時與第三個元素在 同一列 ,那麼這 3 個元素稱為一個 直角三角形 。這 3 個元素互相之間不需要相鄰。



2024年8月3日

【leetcode】3143. 正方形中的最多點數

題意:

給你一個二維陣列 points 和一個字串 s ,其中 points[i] 表示第 i 個點的座標,s[i] 表示第 i 個點的 標籤

如果一個正方形的中心在 (0, 0) ,所有邊都平行於座標軸,且正方形內 存在標籤相同的兩個點,那麼我們稱這個正方形是 合法 的。

請你返回 合法 正方形中可以包含的 最多 點數。

注意:

  • 如果一個點位於正方形的邊上或者在邊以內,則認為該點位於正方形內。
  • 正方形的邊長可以為零。



2024年8月4日

【leetcode】572. 另一棵樹的子樹

題意:

給你兩棵二叉樹 rootsubRoot 。檢驗 root 中是否包含和 subRoot 具有相同結構和節點值的子樹。如果存在,返回 true ;否則,返回 false

二叉樹 tree 的一棵子樹包括 tree 的某個節點和這個節點的所有後代節點。tree 也可以看做它自身的一棵子樹。




2024年8月5日

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

題意:

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




2024年8月6日

【leetcode】321. 拼接最大數

題意:

給你兩個整數陣列 nums1nums2,它們的長度分別為 mn。陣列 nums1nums2 分別代表兩個數各位上的數字。同時你也會得到一個整數 k

請你利用這兩個陣列中的數字中建立一個長度為 k <= m + n 的最大數,在這個必須保留來自同一陣列的數字的相對順序。

返回代表答案的長度為 k 的陣列。




2024年8月7日

【leetcode】55. 跳躍遊戲

題意:

給你一個非負整數陣列 nums ,你最初位於陣列的 第一個下標 。陣列中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個下標,如果可以,返回 true ;否則,返回 false




【leetcode】45. 跳躍遊戲 II

題意:

給定一個長度為 n0 索引整數陣列 nums。初始位置為 nums[0]

每個元素 nums[i] 表示從索引 i 向前跳轉的最大長度。換句話說,如果你在 nums[i] 處,你可以跳轉到任意 nums[i + j] 處:

  • 0 <= j <= nums[i]
  • i + j < n

返回到達 nums[n - 1] 的最小跳躍次數。生成的測試用例可以到達 nums[n - 1]




2024年8月8日

【leetcode】3131. 找出與陣列相加的整數 I

題意:

給你兩個長度相等的陣列 nums1nums2

陣列 nums1 中的每個元素都與變數 x 所表示的整數相加。如果 x 為負數,則表現為元素值的減少。

在與 x 相加後,nums1nums2 相等 。當兩個陣列中包含相同的整數,並且這些整數出現的頻次相同時,兩個陣列 相等

返回整數 x




2024年8月9日

【leetcode】3132. 找出與陣列相加的整數 II

題意:

給你兩個整數陣列 nums1nums2

nums1 中移除兩個元素,並且所有其他元素都與變數 x 所表示的整數相加。如果 x 為負數,則表現為元素值的減少。

執行上述操作後,nums1nums2 相等 。當兩個陣列中包含相同的整數,並且這些整數出現的頻次相同時,兩個陣列 相等

返回能夠實現陣列相等的 最小 整數 x




2024年8月10日

【leetcode】274. H 指數

題意:

給你一個整數陣列 citations ,其中 citations[i] 表示研究者的第 i 篇論文被引用的次數。計算並返回該研究者的 h 指數

根據維基百科上 h 指數的定義h 代表“高引用次數” ,一名科研人員的 h 指數 是指他(她)至少發表了 h 篇論文,並且 至少h 篇論文被引用次數大於等於 h 。如果 h 有多種可能的值,h 指數 是其中最大的那個。




2024年8月11日

【leetcode】1035. 不相交的線

題意:

在兩條獨立的水平線上按給定的順序寫下 nums1nums2 中的整數。

現在,可以繪製一些連線兩個數字 nums1[i]nums2[j] 的直線,這些直線需要同時滿足:

  • nums1[i] == nums2[j]
  • 且繪製的直線不與任何其他連線(非水平線)相交。

請注意,連線即使在端點也不能相交:每個數字只能屬於一條連線。

以這種方法繪製線條,並返回可以繪製的最大連線數。




2024年8月12日

【leetcode】20. 有效的括號

題意:

給定一個只包括 '('')''{''}''['']' 的字串 s ,判斷字串是否有效。

有效字串需滿足:

  1. 左括號必須用相同型別的右括號閉合。
  2. 左括號必須以正確的順序閉合。
  3. 每個右括號都有一個對應的相同型別的左括號。



2024年8月13日

【leetcode】3151. 特殊陣列 I

題意:

如果陣列的每一對相鄰元素都是兩個奇偶性不同的數字,則該陣列被認為是一個 特殊陣列

Aging 有一個整數陣列 nums。如果 nums 是一個 特殊陣列 ,返回 true,否則返回 false




2024年8月14日

【leetcode】3152. 特殊陣列 II

題意:

如果陣列的每一對相鄰元素都是兩個奇偶性不同的數字,則該陣列被認為是一個 特殊陣列

你有一個整數陣列 nums 和一個二維整數矩陣 queries,對於 queries[i] = [fromi, toi],請你幫助你檢查子陣列 nums[fromi..toi] 是不是一個 特殊陣列

返回布林陣列 answer,如果 nums[fromi..toi] 是特殊陣列,則 answer[i]true ,否則,answer[i]false




2024年8月15日

【leetcode】3148. 矩陣中的最大得分

題意:

給你一個由 正整數 組成、大小為 m x n 的矩陣 grid。你可以從矩陣中的任一單元格移動到另一個位於正下方或正右側的任意單元格(不必相鄰)。從值為 c1 的單元格移動到值為 c2 的單元格的得分為 c2 - c1

你可以從 任一 單元格開始,並且必須至少移動一次。

返回你能得到的 最大 總得分。




2024年8月16日

【leetcode】198. 打家劫舍

題意:

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警

給定一個代表每個房屋存放金額的非負整數陣列,計算你 不觸動警報裝置的情況下 ,一夜之內能夠偷竊到的最高金額。




2024年8月17日

【leetcode】10. 正規表示式匹配

題意:

給你一個字串 s 和一個字元規律 p,請你來實現一個支援 '.''*' 的正規表示式匹配。

  • '.' 匹配任意單個字元
  • '*' 匹配零個或多個前面的那一個元素

所謂匹配,是要涵蓋 整個 字串 s 的,而不是部分字串。




【leetcode】44. 萬用字元匹配

題意:

給你一個輸入字串 (s) 和一個字元模式 (p) ,請你實現一個支援 '?''*' 匹配規則的萬用字元匹配:

  • '?' 可以匹配任何單個字元。
  • '*' 可以匹配任意字元序列(包括空字元序列)。

判定匹配成功的充要條件是:字元模式必須能夠 完全匹配 輸入字串(而不是部分匹配)。




2024年8月18日

【leetcode】551. 學生出勤記錄 I

題意:

給你一個字串 s 表示一個學生的出勤記錄,其中的每個字元用來標記當天的出勤情況(缺勤、遲到、到場)。記錄中只含下面三種字元:

  • 'A':Absent,缺勤
  • 'L':Late,遲到
  • 'P':Present,到場

如果學生能夠 同時 滿足下面兩個條件,則可以獲得出勤獎勵:

  • 總出勤 計,學生缺勤('A'嚴格 少於兩天。
  • 學生 不會 存在 連續 3 天或 連續 3 天以上的遲到('L')記錄。

如果學生可以獲得出勤獎勵,返回 true ;否則,返回 false




【leetcode】1004. 最大連續1的個數 III

題意:

給定一個二進位制陣列 nums 和一個整數 k,如果可以翻轉最多 k0 ,則返回 陣列中連續 1 的最大個數




【leetcode】1996. 遊戲中弱角色的數量

題意:

你正在參加一個多角色遊戲,每個角色都有兩個主要屬性:攻擊防禦 。給你一個二維整數陣列 properties ,其中 properties[i] = [attacki, defensei] 表示遊戲中第 i 個角色的屬性。

如果存在一個其他角色的攻擊和防禦等級 都嚴格高於 該角色的攻擊和防禦等級,則認為該角色為 弱角色 。更正式地,如果認為角色 i 弱於 存在的另一個角色 j ,那麼 attackj > attackidefensej > defensei

返回 弱角色 的數量。




2024年8月19日

【leetcode】552. 學生出勤記錄 II

題意:

可以用字串表示一個學生的出勤記錄,其中的每個字元用來標記當天的出勤情況(缺勤、遲到、到場)。記錄中只含下面三種字元:

  • 'A':Absent,缺勤
  • 'L':Late,遲到
  • 'P':Present,到場

如果學生能夠 同時 滿足下面兩個條件,則可以獲得出勤獎勵:

  • 總出勤 計,學生缺勤('A'嚴格 少於兩天。
  • 學生 不會 存在 連續 3 天或 連續 3 天以上的遲到('L')記錄。

給你一個整數 n ,表示出勤記錄的長度(次數)。請你返回記錄長度為 n 時,可能獲得出勤獎勵的記錄情況 數量 。答案可能很大,所以返回對 10^9 + 7 取餘 的結果。




2024年8月20日

【leetcode】190. 顛倒二進位制位

題意:

顛倒給定的 32 位無符號整數的二進位制位。




2024年8月21日

【leetcode】300. 最長遞增子序列

題意:

給你一個整數陣列 nums ,找到其中最長嚴格遞增子序列的長度。

子序列 是由陣列派生而來的序列,刪除(或不刪除)陣列中的元素而不改變其餘元素的順序。例如,[3,6,2,7] 是陣列 [0,3,1,6,2,2,7] 的子序列。




2024年8月22日

【leetcode】1671. 得到山形陣列的最少刪除次數

題意:

我們定義 arr山形陣列 當且僅當它滿足:

  • arr.length >= 3
  • 存在某個下標 i(從 0 開始) 滿足 0 < i < arr.length - 1 且:
    • arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
    • arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

給你整數陣列 nums ,請你返回將 nums 變成 山形狀陣列最少 刪除次數。




2024年8月23日

【leetcode】380. O(1) 時間插入、刪除和獲取隨機元素

題意:

實現RandomizedSet 類:

  • RandomizedSet() 初始化 RandomizedSet 物件
  • bool insert(int val) 當元素 val 不存在時,向集合中插入該項,並返回 true ;否則,返回 false
  • bool remove(int val) 當元素 val 存在時,從集合中移除該項,並返回 true ;否則,返回 false
  • int getRandom() 隨機返回現有集合中的一項(測試用例保證呼叫此方法時集合中至少存在一個元素)。每個元素應該有 相同的機率 被返回。

你必須實現類的所有函式,並滿足每個函式的 平均 時間複雜度為 O(1)




2024年8月24日

【leetcode】3146. 兩個字串的排列差

題意:

給你兩個字串 st,每個字串中的字元都不重複,且 ts 的一個排列。

排列差 定義為 st 中每個字元在兩個字串中位置的絕對差值之和。

返回 st 之間的 排列差




2024年8月25日

【leetcode】13. 羅馬數字轉整數

題意:

羅馬數字包含以下七種字元: IVXLCDM

字元          數值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 羅馬數字 2 寫做 II ,即為兩個並列的 1 。12 寫做 XII ,即為 X + II27 寫做 XXVII, 即為 XX + V + II

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用於以下六種情況:

  • I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。

給定一個羅馬數字,將其轉換成整數。




2024年8月26日

【leetcode】690. 員工的重要性

題意:

你有一個儲存員工資訊的資料結構,它包含了員工唯一的 id ,重要度和直系下屬的 id 。

給定一個員工陣列 employees,其中:

  • employees[i].id 是第 i 個員工的 ID。
  • employees[i].importance 是第 i 個員工的重要度。
  • employees[i].subordinates 是第 i 名員工的直接下屬的 ID 列表。

給定一個整數 id 表示一個員工的 ID,返回這個員工和他所有下屬的重要度的 總和




2024年8月27日

【leetcode】427. 建立四叉樹

題意:

給你一個 n * n 矩陣 grid ,矩陣由若干 01 組成。請你用四叉樹表示該矩陣 grid

你需要返回能表示矩陣 grid 的 四叉樹 的根結點。

我們可以按以下步驟為二維區域構建四叉樹:

  1. 如果當前網格的值相同(即,全為 0 或者全為 1),將 isLeaf 設為 True ,將 val 設為網格相應的值,並將四個子節點都設為 Null 然後停止。
  2. 如果當前網格的值不同,將 isLeaf 設為 False, 將 val 設為任意值,然後如下圖所示,將當前網格劃分為四個子網格。
  3. 使用適當的子網格遞迴每個子節點。



2024年8月28日

【leetcode】104. 二叉樹的最大深度

題意:

給定一個二叉樹 root ,返回其最大深度。

二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。




2024年8月29日

【leetcode】3142. 判斷矩陣是否滿足條件

題意:

給你一個大小為 m x n 的二維矩陣 grid 。你需要判斷每一個格子 grid[i][j] 是否滿足:

  • 如果它下面的格子存在,那麼它需要等於它下面的格子,也就是 grid[i][j] == grid[i + 1][j]
  • 如果它右邊的格子存在,那麼它需要不等於它右邊的格子,也就是 grid[i][j] != grid[i][j + 1]

如果 所有 格子都滿足以上條件,那麼返回 true ,否則返回 false




2024年8月30日

【leetcode】3153. 所有數對中數位差之和

題意:

你有一個陣列 nums ,它只包含 整數,所有正整數的數位長度都 相同

兩個整數的 數位差 指的是兩個整數 相同 位置上不同數字的數目。

請你返回 nums所有 整數對裡,數位差之和。




2024年8月31日

【leetcode】3127. 構造相同顏色的正方形

題意:

給你一個二維 3 x 3 的矩陣 grid ,每個格子都是一個字元,要麼是 'B' ,要麼是 'W' 。字元 'W' 表示白色,字元 'B' 表示黑色。

你的任務是改變 至多一個 格子的顏色,使得矩陣中存在一個 2 x 2 顏色完全相同的正方形。

如果可以得到一個相同顏色的 2 x 2 正方形,那麼返回 true ,否則返回 false