diff --git a/work/1/Medium/Array/1004.max-consecutive-ones-iii.py b/work/1/Medium/Array/1004.max-consecutive-ones-iii.py new file mode 100644 index 0000000..a0d5fd0 --- /dev/null +++ b/work/1/Medium/Array/1004.max-consecutive-ones-iii.py @@ -0,0 +1,57 @@ +""" +1004. Max Consecutive Ones III +Difficulty: Medium +https://leetcode.com/problems/max-consecutive-ones-iii/ + +────────────────────────────────────────────────── + +Given a binary array nums and an integer k, return the maximum number +of consecutive 1's in the array if you can flip at most k 0's. + + + +Example 1: + +Input: nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2 +Output: 6 +Explanation: [1,1,1,0,0,1,1,1,1,1,1] +Bolded numbers were flipped from 0 to 1. The longest subarray is +underlined. + +Example 2: + +Input: nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3 +Output: 10 +Explanation: [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1] +Bolded numbers were flipped from 0 to 1. The longest subarray is +underlined. + + + +Constraints: + + • 1 <= nums.length <= 10^5 + + • nums[i] is either 0 or 1. + + • 0 <= k <= nums.length +""" + + +class Solution: + def longestOnes(self, nums: list[int], k: int) -> int: + left = 0 + cur = 0 + ans = 0 + + for right in range(len(nums)): + if nums[right] == 0: + cur += 1 + while cur > k: + if nums[left] == 0: + cur -= 1 + left += 1 + + ans = max(ans, right - left + 1) + + return ans