Информация об изменениях

Сообщение Re[3]: Нули и единицы от 05.04.2025 12:39

Изменено 05.04.2025 12:40 apachik

Re[3]: Нули и единицы
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(numb):
            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

если дошли до конца, то конец
если можем подвинуть правый указатель без штрафа, то двигаем
если можем подвинуть со штрафом и лимит не исчерпали, то тоже двигаем
если ничего из верхнего не сработало, то приходится двигать левый указатель, возвращая штрафы
Re[3]: Нули и единицы
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

если дошли до конца, то конец
если можем подвинуть правый указатель без штрафа, то двигаем
если можем подвинуть со штрафом и лимит не исчерпали, то тоже двигаем
если ничего из верхнего не сработало, то приходится двигать левый указатель, возвращая штрафы