WX>В любом случае не представляю, как такое можно решить в режиме лайвкодинга, за 15-20 минут (а ожидали примерно такое время, раз дали задачу в самом конце).
возможно, такой код будет проще для понимания и реализации (я не запускал, мог ошибиться где-то на +-1):
def longestOnes(nums, k):
left = 0
max_len = 0
zeros = 0
while True:
max_len = max(max_len, right - left + 1)
if right == len(num):
break
if num[right] == 1:
right += 1
continue
if num[right] == 0 and zeros < k:
right += 1
zeros += 1
continue
if num[left] == 1:
left += 1
continue
if num[left] == 0:
left += 1
zeros -= 1
continue
max_len = max(max_len, right - left + 1)
return max_len
если дошли до конца, то конец
если можем подвинуть правый указатель без штрафа, то двигаем
если можем подвинуть со штрафом и лимит не исчерпали, то тоже двигаем
если ничего из верхнего не сработало, то приходится двигать левый указатель, возвращая штрафы