LeetCode Weekly Contest 375 解題紀錄
這兩次週賽都已經做到10分鐘內寫完Q1、Q2了,Q3一開始用前綴和 + 雜湊表統計吃了TLE 。先去看Q4發現就是區間合併的問題,但忘了用,吃了 RE 。回去看Q3發現是滑動窗口,喜提第一次 AK 4題!
All problems solved by python
Q1: 🟢 2960. Count Tested Devices After Test Operations 1169
tags: 陣列(Array)
模擬(Simulation)
差分陣列(Difference Array)
前綴和(Prefix Sum)
題意
給定一個長度為 的整數陣列 ,表示 個裝置的電池百分比,你的任務是按照順序測試每個設備 ,執行以下測試操作:
- 如果 :
- 增加答案數,表示已測試設備的計數。
- 將下標在 的所有設備的電池百分比減少 ,確保它們的電池百分比不會低於 ,即 。
- 移動到下一個裝置。
- 否則,請移動到下一個設備而不執行任何測試。
返回已測試設備的數量。
思路:直接模擬 / 差分陣列
方法一:直接模擬
- 按照題目要求模擬即可
- 時間複雜度
方法二:差分陣列
- 對於每個設備,其需要減少的電量為前面已測試設備的數量,因此若前面已測試設備的數量大於當前電量,則當前設備不需要測試。
- 時間複雜度
1 | class Solution: |
1 | class Solution: |
Q2: 🟡 2961. Double Modular Exponentiation 1451
tags: 模擬(Simulation)
快速冪(Fast Power)
數學(Math)
陣列(Array)
題意
給定一個二維陣列 ,其中 ,以及一個整數 。求滿足 的 的集合。
思路:暴力 + 快速冪
- 對於每個 ,計算 即可。
- 對於 ,可以使用快速冪計算,時間複雜度
- Python 中, 可以直接計算 ,時間複雜度
- 時間複雜度 ,其中 為 的長度, 為 的最大值。
1 | class Solution: |
類題
Q3: 🟡 2962. Count Subarrays Where Max Element Appears at Least K Times 1701
tags: 陣列(Array)
滑動窗口(Sliding Window)
前綴和(Prefix Sum)
二分搜尋(Binary Search)
題意
給定一個整數陣列 和一個正整數 。統計有多少個子陣列滿足「 中的最大元素至少出現 次」,並返回滿足這一條件的子陣列的數目。
思路:滑動窗口 / 前綴和 + 二分搜索
方法一:滑動窗口
- 讓窗口保持在向左擴張1次就能滿足條件的狀態,即保證 中 出現的次數恰好為 。
- 由於上述性質,對於每個 ,都可以往左擴張 次,使其滿足題目條件,因此答案增加 。
- 以 , 為例,:
- ,,,,。
- ,,,,。
- ,,,,。
- ,,,,。
- ,,,,。
- ,,,,。
- 時間複雜度
方法二:前綴和 + 二分搜索
- 先用前綴和 統計 中最大元素出現的次數,則 表示 中 出現的次數。
- 對於每個左端點 ,找到 的位置 ,則 中 出現的次數恰好為 ,subarray可以繼續向右,故延伸答案增加 。
- 還是以 , 為例,,:
- ,,,。
- ,,,。
- ,,,。
- ,,,。
- ,,,。(此時已經找不到滿足條件的j了)
- ,,,。
- 時間複雜度
1 | class Solution: |
1 | class Solution: |
類題
不定長度的滑動窗口 (求最長或最大)
- 🟡 3. Longest Substring Without Repeating Characters
的情況 - 🟡 1493. Longest Subarray of 1’s After Deleting One Element 1423
- 🟡 904. Fruit Into Baskets 1516
- 🟡 1695. Maximum Erasure Value 1529
- 🟡 2841. Maximum Sum of Almost Unique Subarray 1546
- 🟡 2024. Maximize the Confusion of an Exam 1643
- 🟡 1004. Max Consecutive Ones III 1656
- 🟡 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit 1672
- 🟡 2401. Longest Nice Subarray 1750
- 🟡 1658. Minimum Operations to Reduce X to Zero 1817
- 🟡 1838. Frequency of the Most Frequent Element 1876
- 🟡 2831. Find the Longest Equal Subarray 1976
- 🔴 2106. Maximum Fruits Harvested After at Most K Steps 2062
- 🔴 1610. Maximum Number of Visible Points 2147
- 🟡 395. Longest Substring with At Least K Repeating Characters
- 🟢 1763. Longest Nice Substring 1522
- 🔴 2953. Count Complete Substrings
- 159. Longest Substring with At Most Two Distinct Characters (Premium)
- 340. Longest Substring with At Most K Distinct Characters (Premium)
不定長度的滑動窗口 (求最短或最小)
- 🟡 209. Minimum Size Subarray Sum
- 🟡 1234. Replace the Substring for Balanced String 1878
- 🟡 1574. Shortest Subarray to be Removed to Make Array Sorted 1932
- 🔴 76. Minimum Window Substring
不定長度的滑動窗口 (求subarray個數)
- 🟡 2799. Count Complete Subarrays in an Array 1398
- 🟡 713. Subarray Product Less Than K
- 🟡 1358. Number of Substrings Containing All Three Characters 1646
- 🔴 2302. Count Subarrays With Score Less Than K 1808
- 🟡 2537. Count the Number of Good Subarrays 1892
- 🟡 2762. Continuous Subarrays 1940
- 2743. Count Substrings Without Repeating Character (Premium)
多指針滑動窗口
- 🟡 930. Binary Subarrays With Sum 1592
- 🟡 1248. Count Number of Nice Subarrays 1624
- 🟡 2563. Count the Number of Fair Pairs 1721
- 🟡 1712. Ways to Split Array Into Three Subarrays 2079
- 🔴 2444. Count Subarrays With Fixed Bounds 2093
- 🔴 992. Subarrays with K Different Integers 2210
題單來自:@灵茶山艾府
Q4. 🔴 2963. Count the Number of Good Partitions 1985
tags: 區間合併(Interval Merge)
快速冪(Fast Power)
陣列(Array)
排序(Sorting)
雜湊表(Hash Table)
數學(Math)
組合數學(Combinatorics)
題意
- 給定一個由 正整數 組成的陣列 ,將其分割成一個或多個 連續 子陣列,如果不同子陣列中不包含相同數字,則認為是一種 好分割方案。求好分割方案的數目。
- 由於答案可能很大,返回對 取餘 的結果。
思路:區間合併
- 題目要求相同數字必在同一個子陣列中,因此可以將每個數字出現的位置視為一個區間,對於重疊的區間,需合併成一個區間,則問題變為「求合併後的區間數量」。
- 若剩下區間數量為 ,則有 個位置可選擇連接或不連接,可能的分割方案數量為 種。
- 對於每個數字,可以使用雜湊表統計其出現的最左和最右位置,再將區間按照最左位置排序,即可合併區間。
- 若當前區間的左端點大於前一個區間的右端點,則不重疊,新增當前區間。
- 否則當前區間與前一個區間重疊,更新前一個區間的右端點。
- 對於 ,可以使用快速冪計算,時間複雜度
- Python 中, 可以直接計算 ,時間複雜度
- 時間複雜度 ,其中 為 的長度,排序的時間複雜度為 ,合併區間的時間複雜度為 。
- 空間複雜度 ,用來存放雜湊表和合併後的區間。
1 | class Solution: |
類題
- 🟡 56. Merge Intervals
- 🟡 55. Jump Game
- 🟡 2580. Count Ways to Group Overlapping Ranges 1632
- 🔴 2584. Split the Array to Make Coprime Products 2159
- 2655. Find Maximal Uncovered Ranges (Premium)
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus