2024年9月刷題記錄

jiamian22發表於2024-12-08

2024年9月1日

【leetcode】1450. 在既定時間做作業的學生人數

題意:

給你兩個整數陣列 startTime(開始時間)和 endTime(結束時間),並指定一個整數 queryTime 作為查詢時間。

已知,第 i 名學生在 startTime[i] 時開始寫作業並於 endTime[i] 時完成作業。

請返回在查詢時間 queryTime 時正在做作業的學生人數。形式上,返回能夠使 queryTime 處於區間 [startTime[i], endTime[i]](含)的學生人數。




2024年9月2日

【leetcode】2024. 考試的最大困擾度

題意:

一位老師正在出一場由 n 道判斷題構成的考試,每道題的答案為 true (用 'T' 表示)或者 false (用 'F' 表示)。老師想增加學生對自己做出答案的不確定性,方法是 最大化連續相同 結果的題數。(也就是連續出現 true 或者連續出現 false)。

給你一個字串 answerKey ,其中 answerKey[i] 是第 i 個問題的正確結果。除此以外,還給你一個整數 k ,表示你能進行以下操作的最多次數:

  • 每次操作中,將問題的正確答案改為 'T' 或者 'F' (也就是將 answerKey[i] 改為 'T' 或者 'F' )。

請你返回在不超過 k 次操作的情況下,最大 連續 'T' 或者 'F' 的數目。

【leetcode】424. 替換後的最長重複字元

給你一個字串 s (僅由大寫英文字母組成)和一個整數 k 。你可以選擇字串中的任一字元,並將其更改為任何其他大寫英文字元。該操作最多可執行 k 次。

在執行上述操作後,返回包含相同字母的最長子字串的長度

【leetcode】2401. 最長優雅子陣列

給你一個由 整陣列成的陣列 nums

如果 nums 的子陣列中位於 不同 位置的每對元素按位 與(AND)運算的結果等於 0 ,則稱該子陣列為 優雅 子陣列。

返回 最長 的優雅子陣列的長度。

子陣列 是陣列中的一個 連續 部分。

注意:長度為 1 的子陣列始終視作優雅子陣列。

【leetcode】2009. 使陣列連續的最少運算元

給你一個整數陣列 nums 。每一次操作中,你可以將 nums任意 一個元素替換成 任意 整數。

如果 nums 滿足以下條件,那麼它是 連續的

  • nums 中所有元素都是 互不相同 的。
  • nums最大 元素與 最小 元素的差等於 nums.length - 1

比方說,nums = [4, 2, 5, 3]連續的 ,但是 nums = [1, 2, 3, 5, 6] 不是連續的

請你返回使 nums 連續最少 操作次數。




2024年9月3日

【leetcode】2708. 一個小組的最大實力值

給你一個下標從 0 開始的整數陣列 nums ,它表示一個班級中所有學生在一次考試中的成績。老師想選出一部分同學組成一個 非空 小組,且這個小組的 實力值 最大,如果這個小組裡的學生下標為 i_0, i_1, i_2, ... , i_k ,那麼這個小組的實力值定義為 nums[i_0] * nums[i_1] * nums[i_2] * ... * nums[i_k]

請你返回老師建立的小組能得到的最大實力值為多少。




2024年9月4日

【leetcode】2860. 讓所有學生保持開心的分組方法數

給你一個下標從 0 開始、長度為 n 的整數陣列 nums ,其中 n 是班級中學生的總數。班主任希望能夠在讓所有學生保持開心的情況下選出一組學生:

如果能夠滿足下述兩個條件之一,則認為第 i 位學生將會保持開心:

  • 這位學生被選中,並且被選中的學生人數 嚴格大於 nums[i]
  • 這位學生沒有被選中,並且被選中的學生人數 嚴格小於 nums[i]

返回能夠滿足讓所有學生保持開心的分組方法的數目。




2024年9月5日

【leetcode】3174. 清除數字

給你一個字串 s

你的任務是重複以下操作刪除 所有 數字字元:

  • 刪除 第一個數字字元 以及它左邊 最近非數字 字元。

請你返回刪除所有數字字元以後剩下的字串。




2024年9月6日

【leetcode】191. 位1的個數

編寫一個函式,獲取一個正整數的二進位制形式並返回其二進位制表示式中 設定位 的個數(也被稱為漢明重量)。




2024年9月7日

【leetcode】209. 長度最小的子陣列

給定一個含有 n 個正整數的陣列和一個正整數 target

找出該陣列中滿足其總和大於等於 target 的長度最小的 子陣列 [numsl, numsl+1, ..., numsr-1, numsr] ,並返回其長度如果不存在符合條件的子陣列,返回 0




2024年9月8日

【leetcode】977. 有序陣列的平方

給你一個按 非遞減順序 排序的整數陣列 nums,返回 每個數字的平方 組成的新陣列,要求也按 非遞減順序 排序。

請你設計時間複雜度為 O(n) 的演算法解決本問題。




2024年9月9日

【leetcode】2181. 合併零之間的節點

給你一個連結串列的頭節點 head ,該連結串列包含由 0 分隔開的一連串整數。連結串列的 開端末尾 的節點都滿足 Node.val == 0

對於每兩個相鄰的 0 ,請你將它們之間的所有節點合併成一個節點,其值是所有已合併節點的值之和。然後將所有 0 移除,修改後的連結串列不應該含有任何 0

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




2024年9月10日

【leetcode】456. 132 模式

給你一個整數陣列 nums ,陣列中共有 n 個整數。132 模式的子序列 由三個整數 nums[i]nums[j]nums[k] 組成,並同時滿足:i < j < knums[i] < nums[k] < nums[j]

如果 nums 中存在 132 模式的子序列 ,返回 true ;否則,返回 false

【leetcode】42. 接雨水

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。




2024年9月11日

【leetcode】2555. 兩個線段獲得的最多獎品

X軸 上有一些獎品。給你一個整數陣列 prizePositions ,它按照 非遞減 順序排列,其中 prizePositions[i] 是第 i 件獎品的位置。數軸上一個位置可能會有多件獎品。再給你一個整數 k

你可以同時選擇兩個端點為整數的線段。每個線段的長度都必須是 k 。你可以獲得位置在任一線段上的所有獎品(包括線段的兩個端點)。注意,兩個線段可能會有相交。

  • 比方說 k = 2 ,你可以選擇線段 [1, 3][2, 4] ,你可以獲得滿足 1 <= prizePositions[i] <= 3 或者 2 <= prizePositions[i] <= 4 的所有獎品 i 。

請你返回在選擇兩個最優線段的前提下,可以獲得的 最多 獎品數目。




2024年9月12日

【leetcode】2576. 求出最多標記下標

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

一開始,所有下標都沒有被標記。你可以執行以下操作任意次:

  • 選擇兩個 互不相同且未標記 的下標 ij ,滿足 2 * nums[i] <= nums[j] ,標記下標 ij

請你執行上述操作任意次,返回 nums 中最多可以標記的下標數目。




2024年9月13日

【leetcode】698. 劃分為k個相等的子集

給定一個整數陣列 nums 和一個正整數 k,找出是否有可能把這個陣列分成 k 個非空子集,其總和都相等。




2024年9月14日

【leetcode】2390. 從字串中移除星號

給你一個包含若干星號 * 的字串 s

在一步操作中,你可以:

  • 選中 s 中的一個星號。
  • 移除星號 左側 最近的那個 非星號 字元,並移除該星號自身。

返回移除 所有 星號之後的字串

注意:

  • 生成的輸入保證總是可以執行題面中描述的操作。
  • 可以證明結果字串是唯一的。



2024年9月15日

【leetcode】2848. 與車相交的點

給你一個下標從 0 開始的二維整數陣列 nums 表示汽車停放在數軸上的座標。對於任意下標 inums[i] = [starti, endi] ,其中 starti 是第 i 輛車的起點,endi 是第 i 輛車的終點。

返回數軸上被車 任意部分 覆蓋的整數點的數目。




2024年9月16日

【leetcode】1184. 公交站間的距離

環形公交路線上有 n 個站,按次序從 0n - 1 進行編號。我們已知每一對相鄰公交站之間的距離,distance[i] 表示編號為 i 的車站和編號為 (i + 1) % n 的車站之間的距離。

環線上的公交車都可以按順時針和逆時針的方向行駛。

返回乘客從出發點 start 到目的地 destination 之間的最短距離。




2024年9月17日

【leetcode】815. 公交路線

給你一個陣列 routes ,表示一系列公交線路,其中每個 routes[i] 表示一條公交線路,第 i 輛公交車將會在上面迴圈行駛。

  • 例如,路線 routes[0] = [1, 5, 7] 表示第 0 輛公交車會一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> ... 這樣的車站路線行駛。

現在從 source 車站出發(初始時不在公交車上),要前往 target 車站。 期間僅可乘坐公交車。

求出 最少乘坐的公交車數量 。如果不可能到達終點車站,返回 -1




2024年9月18日

【leetcode】2332. 坐上公交的最晚時間

給你一個下標從 0 開始長度為 n 的整數陣列 buses ,其中 buses[i] 表示第 i 輛公交車的出發時間。同時給你一個下標從 0 開始長度為 m 的整數陣列 passengers ,其中 passengers[j] 表示第 j 位乘客的到達時間。所有公交車出發的時間互不相同,所有乘客到達的時間也互不相同。

給你一個整數 capacity ,表示每輛公交車 最多 能容納的乘客數目。

每位乘客都會搭乘下一輛有座位的公交車。如果你在 y 時刻到達,公交在 x 時刻出發,滿足 y <= x 且公交沒有滿,那麼你可以搭乘這一輛公交。最早 到達的乘客優先上車。

返回你可以搭乘公交車的最晚到達公交站時間。你 不能 跟別的乘客同時刻到達。

注意:陣列 busespassengers 不一定是有序的。




2024年9月19日

【leetcode】2414. 最長的字母序連續子字串的長度

字母序連續字串 是由字母表中連續字母組成的字串。換句話說,字串 "abcdefghijklmnopqrstuvwxyz" 的任意子字串都是 字母序連續字串

  • 例如,"abc" 是一個字母序連續字串,而 "acb""za" 不是。

給你一個僅由小寫英文字母組成的字串 s ,返回其 最長 的 字母序連續子字串 的長度。




2024年9月20日

【leetcode】2376. 統計特殊整數

如果一個正整數每一個數位都是 互不相同 的,我們稱它是 特殊整數

給你一個 整數 n ,請你返回區間 [1, n] 之間特殊整數的數目。




2024年9月21日

【leetcode】2374. 邊積分最高的節點

給你一個有向圖,圖中有 n 個節點,節點編號從 0n - 1 ,其中每個節點都 恰有一條 出邊。

圖由一個下標從 0 開始、長度為 n 的整數陣列 edges 表示,其中 edges[i] 表示存在一條從節點 i 到節點 edges[i]有向 邊。

節點 i邊積分 定義為:所有存在一條指向節點 i 的邊的節點的 編號 總和。

返回 邊積分 最高的節點。如果多個節點的 邊積分 相同,返回編號 最小 的那個。




2024年9月22日

【leetcode】997. 找到小鎮的法官

小鎮裡有 n 個人,按從 1n 的順序編號。傳言稱,這些人中有一個暗地裡是小鎮法官。

如果小鎮法官真的存在,那麼:

  1. 小鎮法官不會信任任何人。
  2. 每個人(除了小鎮法官)都信任這位小鎮法官。
  3. 只有一個人同時滿足屬性 1 和屬性 2

給你一個陣列 trust ,其中 trust[i] = [a_i, b_i] 表示編號為 a_i 的人信任編號為 b_i 的人。

如果小鎮法官存在並且可以確定他的身份,請返回該法官的編號;否則,返回 -1




2024年9月23日

【leetcode】1014. 最佳觀光組合

給你一個正整數陣列 values,其中 values[i] 表示第 i 個觀光景點的評分,並且兩個景點 ij 之間的 距離j - i

一對景點(i < j)組成的觀光組合的得分為 values[i] + values[j] + i - j ,也就是景點的評分之和 減去 它們兩者之間的距離。

返回一對觀光景點能取得的最高分。




2024年9月24日

【leetcode】5. 最長迴文子串

給你一個字串 s,找到 s 中最長的迴文子串。

【leetcode】516. 最長迴文子序列

給你一個字串 s ,找出其中最長的迴文子序列,並返回該序列的長度。

子序列定義為:不改變剩餘字元順序的情況下,刪除某些字元或者不刪除任何字元形成的一個序列。

【leetcode】2207. 字串中最多數目的子序列

給你一個下標從 0 開始的字串 text 和另一個下標從 0 開始且長度為 2 的字串 pattern ,兩者都只包含小寫英文字母。

你可以在 text 中任意位置插入 一個 字元,這個插入的字元必須是 pattern[0] 或者 pattern[1] 。注意,這個字元可以插入在 text 開頭或者結尾的位置。

請你返回插入一個字元後,text 中最多包含多少個等於 pattern子序列

子序列 指的是將一個字串刪除若干個字元後(也可以不刪除),剩餘字元保持原本順序得到的字串。

【leetcode】1143. 最長公共子序列

給定兩個字串 text1text2,返回這兩個字串的最長 公共子序列 的長度。如果不存在 公共子序列 ,返回 0

一個字串的 子序列 是指這樣一個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。

  • 例如,"ace""abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

兩個字串的 公共子序列 是這兩個字串所共同擁有的子序列。

【leetcode】72. 編輯距離

給你兩個單詞 word1word2, 請返回將 word1 轉換成 word2 所使用的最少運算元。

你可以對一個單詞進行如下三種操作:

  • 插入一個字元
  • 刪除一個字元
  • 替換一個字元



2024年9月25日

【leetcode】279. 完全平方數

給你一個整數 n ,返回 和為 n 的完全平方數的最少數量

完全平方數 是一個整數,其值等於另一個整數的平方;換句話說,其值等於一個整數自乘的積。例如,14916 都是完全平方數,而 311 不是。




2024年9月26日

【leetcode】2535. 陣列元素和與數字和的絕對差

給你一個正整數陣列 nums

  • 元素和nums 中的所有元素相加求和。
  • 數字和nums 中每一個元素的每一數位(重複數位需多次求和)相加求和。

返回 元素和數字和 的絕對差。

注意:兩個整數 xy 的絕對差定義為 |x - y|




2024年9月27日

【leetcode】76. 最小覆蓋子串

給你一個字串 s 、一個字串 t 。返回 s 中涵蓋 t 所有字元的最小子串。如果 s 中不存在涵蓋 t 所有字元的子串,則返回空字串 ""

注意:

  • 對於 t 中重複字元,我們尋找的子字串中該字元數量必須不少於 t 中該字元數量。
  • 如果 s 中存在這樣的子串,我們保證它是唯一的答案。

【leetcode】41. 缺失的第一個正數

給你一個未排序的整數陣列 nums ,請你找出其中沒有出現的最小的正整數。

請你實現時間複雜度為 O(n) 並且只使用常數級別額外空間的解決方案。

【leetcode】2516. 每種字元至少取 K 個

給你一個由字元 'a''b''c' 組成的字串 s 和一個非負整數 k 。每分鐘,你可以選擇取走 s 最左側 還是 最右側 的那個字元。

你必須取走每種字元 至少 k 個,返回需要的 最少 分鐘數;如果無法取到,則返回 -1

【leetcode】54. 螺旋矩陣

給你一個 mn 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。

【leetcode】48. 旋轉影像

給定一個 n × n 的二維矩陣 matrix 表示一個影像。請你將影像順時針旋轉 90 度。

你必須在 原地 旋轉影像,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉影像。

【leetcode】240. 搜尋二維矩陣 II

編寫一個高效的演算法來搜尋 m*n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性:

  • 每行的元素從左到右升序排列。
  • 每列的元素從上到下升序排列。



2024年9月28日

【leetcode】62. 不同路徑

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。

問總共有多少條不同的路徑?

【leetcode】64. 最小路徑和

給定一個包含非負整數的 m x n 網格 grid ,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

說明:每次只能向下或者向右移動一步。

【leetcode】31. 下一個排列

整數陣列的一個 排列 就是將其所有成員以序列或線性順序排列。

  • 例如,arr = [1,2,3] ,以下這些都可以視作 arr 的排列:[1,2,3][1,3,2][3,1,2][2,3,1]

整數陣列的 下一個排列 是指其整數的下一個字典序更大的排列。更正式地,如果陣列的所有排列根據其字典順序從小到大排列在一個容器中,那麼陣列的 下一個排列 就是在這個有序容器中排在它後面的那個排列。如果不存在下一個更大的排列,那麼這個陣列必須重排為字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3] 的下一個排列是 [1,3,2]
  • 類似地,arr = [2,3,1] 的下一個排列是 [3,1,2]
  • arr = [3,2,1] 的下一個排列是 [1,2,3] ,因為 [3,2,1] 不存在一個字典序更大的排列。

給你一個整數陣列 nums ,找出 nums 的下一個排列。

必須原地修改,只允許使用額外常數空間。




2024年9月29日

【leetcode】155. 最小棧

設計一個支援 pushpoptop 操作,並能在常數時間內檢索到最小元素的棧。

實現 MinStack 類:

  • MinStack() 初始化堆疊物件。
  • void push(int val) 將元素val推入堆疊。
  • void pop() 刪除堆疊頂部的元素。
  • int top() 獲取堆疊頂部的元素。
  • int getMin() 獲取堆疊中的最小元素。

【leetcode】394. 字串解碼

給定一個經過編碼的字串,返回它解碼後的字串。

編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重複 k 次。注意 k 保證為正整數。

你可以認為輸入字串總是有效的;輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。

此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數 k ,例如不會出現像 3a2[4] 的輸入。




2024年9月30日

【leetcode】84. 柱狀圖中最大的矩形

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

【leetcode】215. 陣列中的第K個最大元素

給定整數陣列 nums 和整數 k,請返回陣列中第 k 個最大的元素。

請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。

你必須設計並實現時間複雜度為 O(n) 的演算法解決此問題。




2024年9月31日

【leetcode】1845. 座位預約管理系統

請你設計一個管理 n 個座位預約的系統,座位編號從 1n

請你實現 SeatManager 類:

  • SeatManager(int n) 初始化一個 SeatManager 物件,它管理從 1n 編號的 n 個座位。所有座位初始都是可預約的。
  • int reserve() 返回可以預約座位的 最小編號 ,此座位變為不可預約。
  • void unreserve(int seatNumber) 將給定編號 seatNumber 對應的座位變成可以預約。

【leetcode】347. 前 K 個高頻元素

給你一個整數陣列 nums 和一個整數 k ,請你返回其中出現頻率前 k 高的元素。你可以按 任意順序 返回答案。