最大连续1的个数 III

Bernie


Bernie
1456. 最大连续 1 的个数 III
思路:
滑动窗口
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
}