LeetCode in Kotlin

1004. Max Consecutive Ones III

Medium

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:

Solution

class Solution {
    fun longestOnes(nums: IntArray, k: Int): Int {
        var onesCount = 0
        var max = 0
        var start = 0
        for (end in nums.indices) {
            if (nums[end] == 1) {
                onesCount++
            }
            if (end - start + 1 > onesCount + k) {
                if (nums[start] == 1) {
                    onesCount--
                }
                start++
            }
            max = max.coerceAtLeast(end - start + 1)
        }
        return max
    }
}