↓快轉到主要內容
  1. LeetCode/

LeetCode 2024: Maximize the Confusion of an Exam

·1 分鐘· ·
LeetCode Medium Sliding-Window String Binary-Search Prefix-Sum
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-01-10

  • 提交紀錄:Accepted(一次通過)

解題思路
#

一段連續的答案要變成全部相同,最少要改的數量是 T 和 F 裡比較少的那個。所以視窗合法 ⇔ min(T 的數量, F 的數量) <= k。

視窗變大時少的那個只會變多或不變,條件單調,用「求最長」的滑動視窗:不合法就縮左邊。

我的解法
#

class Solution:
    def maxConsecutiveAnswers(self, answerKey: str, k: int) -> int:
        cnt = Counter()
        left = best = 0
        for right, c in enumerate(answerKey):
            cnt[c] += 1
            while min(cnt["T"], cnt["F"]) > k:     # 兩種都超過 k 才不合法
                cnt[answerKey[left]] -= 1
                left += 1
            best = max(best, right - left + 1)
        return best

我原本的寫法只數 T,條件寫成 count_true > k and (長度 - count_true) > k,意思一樣。

複雜度
#

時間 O(n),空間 O(1)。

要特別避免的錯誤
#

  • 分別對「全變 T」和「全變 F」跑兩次也可以,但只用一個視窗、看少的那個就夠了。

面試口說整理
#

一段要全部改成一樣,最少要改的是 T 和 F 裡比較少的那個,所以視窗合法的條件是少的那個 <= k。這個條件隨視窗變大而單調,我用滑動視窗,不合法就縮左邊,記錄最長長度。時間 O(n)。

相關文章

LeetCode 1208: Get Equal Substrings Within Budget
·1 分鐘
LeetCode Medium Sliding-Window String Binary-Search Prefix-Sum
LeetCode 1208 解題筆記:每個位置的花費是 |s[i] - t[i]|,題目變成「總和 <= maxCost 的最長子陣列」
LeetCode 3694: Distinct Points Reachable After Substring Removal
·1 分鐘
LeetCode Medium Sliding-Window Prefix-Sum Hash-Table String
LeetCode 3694 解題筆記:終點 = 全部的位移 − 被刪掉那段的位移;用長度 k 的視窗維護那段的位移,把每個終點放進 set
LeetCode 209: Minimum Size Subarray Sum
·1 分鐘
LeetCode Daily Medium Array Sliding-Window Two-Pointers Prefix-Sum Binary-Search
滑動視窗與雙指針,最小化子陣列長度(總和 ≥ target)。
LeetCode 3634: Minimum Removals to Balance Array
·1 分鐘
LeetCode Medium Sliding-Window Sorting Binary-Search Array
LeetCode 3634 解題筆記:排序後留下來的一定是連續一段;對每個最小值 nums[left],用只往右走的指針找能留到哪裡,刪掉兩邊剩下的
LeetCode 1016: Binary String With Substrings Representing 1 To N
·2 分鐘
LeetCode Medium Sliding-Window String Bit-Manipulation Hash-Table
LeetCode 1016 解題筆記:s 最多 1000 個字元,長度固定時的子字串數量有限,n 太大一定是 False;從 n 往下檢查會很快失敗,或從每個起點往右最多延伸 30 位收集所有 <= n 的值
LeetCode 1888: Minimum Number of Flips to Make the Binary String Alternating
·1 分鐘
LeetCode Medium Sliding-Window String Dynamic-Programming
LeetCode 1888 解題筆記:把移到尾巴的操作變成在 s + s 上滑動長度 n 的視窗;視窗跟 0101… 不同的數量是 diff,跟 1010… 不同的就是 n - diff