Leetcode周赛复盘——第 276 场力扣周赛
第一次參加周賽,AC了三道題,也算不錯的成績了,從現在開始每周的周賽我都會參加并且復盤,有興趣的小伙伴可以一起討論。
5980. 將字符串拆分為若干長度為 k 的組
class Solution:def divideString(self, s: str, k: int, fill: str) -> List[str]:a, b = divmod(len(s), k)ans = []temp = ''now = 0for _ in range(a):temp = s[now:now+k]now = now + kans.append(temp)if b != 0:temp = s[now:] + fill * (k-b)ans.append(temp)return ans簡單的字符串操作題,將字符串以每 k 個為一組加入到列表即可,最后一組如果不夠 k 個則用 fill 字符來補滿,更簡潔的寫法如下:
class Solution:def divideString(self, s: str, k: int, fill: str) -> List[str]:n = len(s)if n % k != 0:s += fill * (k - n % k)return [s[t:t+k] for t in range(0, len(s), k)]5194. 得到目標值的最少行動次數
class Solution:def minMoves(self, target: int, maxDoubles: int) -> int:ans = 0while maxDoubles and target > 1:# 如果是偶數就直接除以2if target % 2 == 0:target = target // 2maxDoubles -= 1ans += 1# 如果是奇數就除以2再減1else:target = (target-1) // 2maxDoubles -= 1ans += 2ans += target - 1return ans目標是以最少次數從 1 得到 target,由于基數越大的時候加倍帶來的收益越高,所以加倍操作一定是放在后面的。反過來想,要從 target 得到 1 ,就是先除以2了(加倍的逆操作),由于有的數除以 2 可能得到奇數,想繼續除下去的話就得減 1,所以要判斷下奇偶。
5982. 解決智力問題
class Solution:def mostPoints(self, questions: List[List[int]]) -> int:n = len(questions)memo = dict()temp = 0memo[n-1] = questions[n-1][0]for i in range(n-2, -1, -1):# 如果當前位置跳過 questions[i][1] 之后還有題目if i + questions[i][1] + 1 in memo:memo[i] = max(memo[i + questions[i][1] + 1] + questions[i][0], memo[i+1])# 當前位置跳過 questions[i][1] 之后沒有題目else:memo[i] = max(questions[i][0], memo[i+1])return max(memo.values())這題看著就像動態規劃的題目,但是從前往后推不可行,因為根本不知道第 i 題對應的最大分數 memo[i] 是從哪一道題轉移過來的,寫不了轉移方程。然而反過來想,用 memo[i] 可以表示第 i 題到最后一題中的最大分數,這樣就可以從后往前,不斷記錄下當前位置(及其后面所有位置)的最大分數。
5983. 同時運行 N 臺電腦的最長時間
class Solution:def maxRunTime(self, n: int, batteries: List[int]) -> int:batteries.sort(reverse=True)s = sum(batteries)for b in batteries:if b > s // n:n -= 1s -= belse:return s // n電池的容量可能不同,則所有電池會存在一個平均值,這是最理想的情況(例如 [10, 1, 1] 的電池給兩臺電腦用,可以用 6 min),但是這得讓 10 容量的電池同時連接兩(多)臺電腦。然而,一個電池最多只能連接一臺電腦。
對于那些超過平均值的電池,它們可以分給一臺電腦從頭用到尾,所以不考慮這個電腦,也不考慮這個電池。
當最大的電池都小于等于平均值,說明此時的平均值是不需要最大的電池連接多臺電腦也可以達到的,即為答案。
總結
以上是生活随笔為你收集整理的Leetcode周赛复盘——第 276 场力扣周赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极端测试 10 个月,机构发布 OLED
- 下一篇: 垂直起降固定翼无人机 F120 应急通信