LeetCode Weekly Contest 373 解題紀錄
這次40分鐘做出了前三題,Q1沒注意 可能 比 大吃了一發 WA ;Q2雖然相較Q4的範圍小,但一開始寫得太暴力了吃了 TLE ;Q3很快想到了用分組討論,直接 AC 了;Q4前兩個關鍵點都想到了,只差用兩個限制條件去做統計了,可惜了。
All problems solved by python
Q1: 🟢 2946. Matrix Similarity After Cyclic Shifts 1406
tags: 陣列(Array)
數學(Math)
矩陣(Matrix)
模擬(Simulation)
題意
給定一個下標從 開始且大小為 的整數矩陣 和整數 。將矩陣中的奇數行循環右移 次,偶數 行循環左移 次。如果初始矩陣和最終矩陣完全相同,則傳回 true ,否則傳回 false 。
思路:模擬
- 切片模擬即可,注意 可能比 大,所以要取模。
- 向左移動 次和原本的列相同,等於向右移動 次和原本的列相同,所以不用特別處理左移右移的問題。
1 | class Solution: |
Q2: 🟡 2947. Count Beautiful Substrings I 1451
tags: 字串(String)
前綴和(Prefix Sum)
枚舉(Enumeration)
題意
給定一個字串 和一個正整數 , 中的母音字母和子音字母的數量分別用 和 表示。如果 滿足以下條件,則稱為 beautiful :
vowels == consonants
,即母音字母和子音字母的數量相等。(vowels * consonants) \% k == 0
,即母音字母和子音字母的數量的乘積能被 整除。
返回字串 中 non-empty beautiful substrings 的數量。
限制:
思路:前綴和 + 暴力枚舉
直接暴力會 TLE ,用前綴和紀錄母音字母和子音字母的數量,然後枚舉所有子字串,判斷是否符合條件即可。
1 | class Solution: |
Q3: 🟡 2948. Make Lexicographically Smallest Array by Swapping Elements 2047
tags: 分組循環
排序(Sorting)
並查集(Union Find)
互斥集(Disjoint Sets)
陣列(Array)
題意
- 給定下標從 開始的 Array 和 一個正整數 。
- 在每次操作中,可以選擇任兩個下標 和 ,如果滿足 ,則交換 和 。
- 返回執行任意次操作後能得到的 lexicographically smallest array。
- 注意:這裡的字典序是以元素做定義的,例如, 比陣列 字典序更小,下標 0 處是兩個陣列第一個不同的位置,且 。
思路:分組討論(分組循環) + 排序
- 可以從觀察範例中得出,若一組數字裡面的元素可以互相交換,則這組數字中連續兩個數字的差值一定 。
- 先把 依照數值大小由小到大排序,並記錄原本的下標。
- 由小到大枚舉 中的每個元素,假設當前枚舉到的元素為 ,則我們要找到所有可以與 交換的元素,也就是差值小於等於 的元素,並將這組數字中的最後一個下標記錄下來。
- 對於同一組內的元素,我們可以任意交換,所以我們可以把元素小的放在前面,元素大的放在後面,這樣就可以保證字典序最小,這裡用了Min Heap來實現,用排序也可以。
- 時間複雜度:
類題
1 | class Solution: |
Q4: 🔴 2949. Count Beautiful Substrings II 2445
tags: 質因數分解
雜湊表(Hash Table)
字串(String)
數學(Math)
數論(Number Theory)
前綴和(Prefix Sum)
題意
同 Q2,但是 的長度從 增加到 。
思路:質因數分解 + 前綴和 + 雜湊表
- 首先,由於條件1 ,所以當子字串長度為 ,則 。 故條件2可以改寫為 。
- 對 做質因子分解,得到 ,其中 為質數, 為指數。對於 的每個質因數 ,無論是奇數或偶數,皆滿足 ,故條件2可改寫成 ,其中 。
- 但由於 ,可以直接暴力計算出 。
- 再來,我們可以令 前綴和 表示 的前 個字元中,母音字母的數量減去輔音字母的數量,或是可以將母音想成 ,子音想成 。
- 若子字串 ( 左閉右開 ) 為 beautiful ,則需滿足
- ,即 中母音字母和輔音字母的數量相等。
- 滿足 ,即
- 故我們可以枚舉 ,並用雜湊表紀錄 出現的次數,並在枚舉 的同時計算答案。
類題
- 🟡 560. Subarray Sum Equals K
- 🟡 974. Subarray Sums Divisible by K 1676
- 🟡 1590. Make Sum Divisible by P 2039
- 🟡 523. Continuous Subarray Sum
- 🟡 525. Contiguous Array
- 🟡 1915. Number of Wonderful Substrings 2235
- 🟡 930. Binary Subarrays With Sum 1592
- 🟡 1371. Find the Longest Substring Containing Vowels in Even Counts 2041
- 🔴 1542. Find Longest Awesome Substring 2222
題單來自:@灵茶山艾府
1 | class Solution: |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus