leetcode - 1004. Max Consecutive Ones III

Description

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

Solution

Solved after hints.

Use a sliding window, make sure there are no more than k 0s inside the window.

Time complexity: o ( n ) o(n) o(n)
Space complexity: o ( n ) o(n) o(n)

Code

class Solution:
    def longestOnes(self, nums: List[int], k: int) -> int:
        zero_cnt = 0
        left = 0
        res = 0
        for right in range(len(nums)):
            # put new item into window
            if nums[right] == 0:
                zero_cnt += 1
            # check if need to shrink the window
            while zero_cnt > k:
                if nums[left] == 0:
                    zero_cnt -= 1
                left += 1
            res = max(res, right - left + 1)
        return res

你可能感兴趣的:(OJ题目记录,leetcode,算法,职场和发展)