LeetCode 第 34 场双周赛(385/2842,前13.5%)
文章目錄
- 1. 比賽結果
- 2. 題目
- 1. LeetCode 5491. 矩陣對角線元素的和 easy
- 2. LeetCode 5492. 分割字符串的方案數 medium
- 3. LeetCode 5493. 刪除最短的子數組使剩余數組有序 medium
- 4. LeetCode 5494. 統計所有可行路徑 hard
1. 比賽結果
做出來3題,最后一題動態規劃,好難,不會。繼續加油!
全國排名: 385 / 2842,13.5%;全球排名: 1149 / 10140,11.3%
2. 題目
1. LeetCode 5491. 矩陣對角線元素的和 easy
題目鏈接
給你一個正方形矩陣 mat,請你返回矩陣對角線元素的和。
請你返回在矩陣主對角線上的元素和副對角線上且不在主對角線上元素的和。
示例 1:
解題:
一次遍歷即可
class Solution { public:int diagonalSum(vector<vector<int>>& mat) {int n = mat.size(), sum = 0;for(int i = 0; i < n; ++i) {sum += mat[i][i]+mat[n-1-i][i];}if(n&1)sum -= mat[n/2][n/2];//奇數時,中間重復了一次return sum;} };32 ms 11.5 MB
2. LeetCode 5492. 分割字符串的方案數 medium
題目鏈接
給你一個二進制串 s (一個只包含 0 和 1 的字符串),我們可以將 s 分割成 3 個 非空 字符串 s1, s2, s3 (s1 + s2 + s3 = s)。
請你返回分割 s 的方案數,滿足 s1,s2 和 s3 中字符 ‘1’ 的數目相同。
由于答案可能很大,請將它對 10^9 + 7 取余后返回。
示例 1: 輸入:s = "10101" 輸出:4 解釋:總共有 4 種方法將 s 分割成含有 '1' 數目相同的三個子字符串。 "1|010|1" "1|01|01" "10|10|1" "10|1|01"示例 2: 輸入:s = "1001" 輸出:0示例 3: 輸入:s = "0000" 輸出:3 解釋:總共有 3 種分割 s 的方法。 "0|0|00" "0|00|0" "00|0|0"示例 4: 輸入:s = "100100010100110" 輸出:12提示: s[i] == '0' 或者 s[i] == '1' 3 <= s.length <= 10^5解題:
- 先檢查1的個數能不能被3整除
- 然后1的個數為0,那么可以有 Cn?12C_{n-1}^2Cn?12? 種可能
- 最后就是2個分界處的 0 的個數+1,再相乘
116 ms 13.6 MB
3. LeetCode 5493. 刪除最短的子數組使剩余數組有序 medium
題目鏈接
給你一個整數數組 arr ,請你刪除一個子數組(可以為空),使得 arr 中剩下的元素是 非遞減 的。
一個子數組指的是原數組中連續的一個子序列。
請你返回滿足題目要求的最短子數組的長度。
示例 1: 輸入:arr = [1,2,3,10,4,2,3,5] 輸出:3 解釋:我們需要刪除的最短子數組是 [10,4,2] ,長度為 3 。 剩余元素形成非遞減數組 [1,2,3,3,5] 。 另一個正確的解為刪除子數組 [3,10,4] 。示例 2: 輸入:arr = [5,4,3,2,1] 輸出:4 解釋:由于數組是嚴格遞減的,我們只能保留一個元素。 所以我們需要刪除長度為 4 的子數組, 要么刪除 [5,4,3,2],要么刪除 [4,3,2,1]。示例 3: 輸入:arr = [1,2,3] 輸出:0 解釋:數組已經是非遞減的了,我們不需要刪除任何元素。示例 4: 輸入:arr = [1] 輸出:0提示: 1 <= arr.length <= 10^5 0 <= arr[i] <= 10^9解題:
- 找到首尾不滿足的地方l, r
- 可以分三種情況,刪除l右側所有的,或者刪除r左側所有的
- 或者 刪除中間的
296 ms 66.8 MB
4. LeetCode 5494. 統計所有可行路徑 hard
題目鏈接
給你一個 互不相同 的整數數組,其中 locations[i] 表示第 i 個城市的位置。
同時給你 start,finish 和 fuel 分別表示出發城市、目的地城市和你初始擁有的汽油總量
每一步中,如果你在城市 i ,你可以選擇任意一個城市 j ,滿足 j != i 且 0 <= j < locations.length ,并移動到城市 j 。
從城市 i 移動到 j 消耗的汽油量為 |locations[i] - locations[j]|,|x| 表示 x 的絕對值。
請注意, fuel 任何時刻都 不能 為負,且你 可以 經過任意城市超過一次(包括 start 和 finish )。
請你返回從 start 到 finish 所有可能路徑的數目。
由于答案可能很大, 請將它對 10^9 + 7 取余后返回。
示例 1: 輸入:locations = [2,3,6,8,4], start = 1, finish = 3, fuel = 5 輸出:4 解釋:以下為所有可能路徑,每一條都用了 5 單位的汽油: 1 -> 3 1 -> 2 -> 3 1 -> 4 -> 3 1 -> 4 -> 2 -> 3示例 2: 輸入:locations = [4,3,1], start = 1, finish = 0, fuel = 6 輸出:5 解釋:以下為所有可能的路徑: 1 -> 0,使用汽油量為 fuel = 1 1 -> 2 -> 0,使用汽油量為 fuel = 5 1 -> 2 -> 1 -> 0,使用汽油量為 fuel = 5 1 -> 0 -> 1 -> 0,使用汽油量為 fuel = 3 1 -> 0 -> 1 -> 0 -> 1 -> 0,使用汽油量為 fuel = 5示例 3: 輸入:locations = [5,2,1], start = 0, finish = 2, fuel = 3 輸出:0 解釋:沒有辦法只用 3 單位的汽油從 0 到達 2 。 因為最短路徑需要 4 單位的汽油。示例 4 : 輸入:locations = [2,1,5], start = 0, finish = 0, fuel = 3 輸出:2 解釋:總共有兩條可行路徑,0 和 0 -> 1 -> 0 。示例 5: 輸入:locations = [1,2,3], start = 0, finish = 2, fuel = 40 輸出:615088286 解釋:路徑總數為 2615088300 。 將結果對 10^9 + 7 取余,得到 615088286 。提示: 2 <= locations.length <= 100 1 <= locations[i] <= 10^9 所有 locations 中的整數 互不相同 。 0 <= start, finish < locations.length 1 <= fuel <= 200解題:
學習了大佬的題解:
- dp[city][f] 表示到達city時,花費了 f燃料的方案數
440 ms 12.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 第 34 场双周赛(385/2842,前13.5%)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1742. 盒子中小球
- 下一篇: LeetCode 1067. 范围内的数