深入解析:记力扣1004.最大连续1的个数 练习理解
给定一个二进制数组
nums和一个整数k,假设最多可以翻转k个0,则返回执行操作后 数组中连续1的最大个数 。
思路:
可以理解为一段有1和0的连续数组中能够存在k个0的最大数组的长度
这样就许可用滑窗的办法来计算长度。
- 我们维护一个窗口 [left, right],保证窗口中 0 的数量不超过 k
- 当窗口中 0 的数量超过 k 时,大家移动左指针缩小窗口
- 在每一步中计算当前窗口长度,并更新最大长度
from typing import List
class Solution:
def LongestOnes(self,nums:List[int],k:int)->int:
left=count=max_len=0
n=len(nums)
for i in range(n):
if nums[i] ==0:
count +=1
while count>k:
if nums[left] ==0:
count -=1
left +=1
current_len=i-left+1
max_len=max(max_len,current_len)
return max_len
难点 :
理解最长代替后的长度即为可存在K个0时的最长的数组,以及在循环中对left更新的理解(当count>k时,left会随着一起增加。

浙公网安备 33010602011771号