深入解析:记力扣1004.最大连续1的个数 练习理解

给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。

思路:

可以理解为一段有1和0的连续数组中能够存在k个0的最大数组的长度

这样就许可用滑窗的办法来计算长度。

  1. 我们维护一个窗口 [left, right],保证窗口中 0 的数量不超过 k
  2. 当窗口中 0 的数量超过 k 时,大家移动左指针缩小窗口
  3. 在每一步中计算当前窗口长度,并更新最大长度
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会随着一起增加。

posted @ 2025-09-16 08:45  yxysuanfa  阅读(12)  评论(0)    收藏  举报