Blog.

最大连续1的个数 III

Cover Image for 最大连续1的个数 III
Bernie
Bernie

1456. 最大连续 1 的个数 III

leetcode 链接

思路:

滑动窗口

1.先将前面 k 个 0 填充为 1,讲这些被填充的位置记录下来,然后计算连续的 1 的个数为 fast,保存到当前最大值中。 2.在从第 fast 往后循环,如果遇到 0,则将 0 放到记录的位置中,然后取第一个填充的位置,fast-firstIndex 即为当前新增一个填充位置之后,得到新的当前长度;如果遇到 1,则当前长度+1;然后再判断当前长度与最大长度的大小,如果当前长度大于最大长度,则更新最大长度,最后返回最大长度即可。

typescript 解法

...

go 解法

func longestOnes(nums []int, k int) int {
    length := len(nums)
    fast := 0
    currentLen := 0
    max := 0
    flipped := make([]int, 0)

    for k != 0 && fast < length {
        if nums[fast] == 0 {
            flipped = append(flipped, fast)
            k --
        }
        fast ++
    }
    currentLen = fast
    max = fast
    for j := fast; j < length; j ++ {
        if nums[j] == 0 {
            flipped = append(flipped, j)
            index := flipped[0]
            flipped = flipped[1:]
            currentLen = j - index
        } else {
            currentLen ++
        }
        if max < currentLen {
            max = currentLen
        }
    }
    return max
}