Logo

[LeetCode] 1004. Max Consecutive Ones III

[LeetCode] 1004. Max Consecutive Ones III の解答と解説

問題

https://leetcode.com/problems/max-consecutive-ones-iii/description/

解答と解説

class Solution:
    def longestOnes(self, nums: List[int], k: int) -> int:
        res = left = count = 0
        for right in range(len(nums)):
            # window内の0の数をカウント
            if nums[right] == 0:
                count += 1
            
            # 0の数がしきい値を超えたらwindowを狭める
            while count > k:
                if nums[left] == 0:
                    count -= 1
                left += 1
            
            # 最大長の比較
            res = max(res, right - left + 1)
        
        return res

numsの配列の要素数をnとした時、

  • Time Complexity: O(n)
  • Space Complexity: O(1)

可変長のSliding Windowの典型パターン。

どのindexの0をフリップするかを考えるのではなく、「window内に0がk個ある場合に最大長はどうなるか」と言い換えて考えるとわかりやすい。