Разбор задачи: Содержит дубликат 2

Предложенный нами код решения:

def contains_nearby_duplicate(nums, k):
    """
    Проверяет, существуют ли два различных индекса i и j, такие что nums[i] == nums[j] и abs(i - j) <= k.
    
    :param nums: List[int], массив целых чисел
    :param k: int, максимальная разница между индексами
    :return: bool, True если условие выполняется, иначе False
    """
    index_map = {}
    for i, num in enumerate(nums):
        if num in index_map and i - index_map[num] <= k:
            return True
        index_map[num] = i
    return False

Задача:

Функция должна вернуть:

  • True, если такие индексы существуют;
  • False — в противном случае.

Пошаговый разбор:

  1. Инициализация:

    index_map = {}

    Создаётся пустой словарь index_map. Этот словарь будет хранить последние встреченные индексы каждого числа из массива nums.

  2. Итерация по массиву nums:

    for i, num in enumerate(nums):

    Используется цикл for, чтобы пройти по всем элементам массива nums. Индекс текущего элемента записывается в переменную iii, а значение элемента — в переменную numnumnum.

  3. Проверка условия задачи:

    if num in index_map and i - index_map[num] <= k:
        return True
    • Первое условие: num in index_map — проверяется, встречался ли текущий элемент ранее. Если элемент есть в словаре, это означает, что ранее мы уже фиксировали его индекс.
    • Второе условие: i - index_map[num] <= k — разница между текущим индексом iii и индексом последнего появления numnumnum (хранящимся в словаре) не превышает kkk.

    Если оба условия выполняются, значит, найдены два индекса iii и jjj, удовлетворяющие задаче. Функция сразу возвращает True.

  4. Обновление словаря:

    index_map[num] = i

    Если текущий элемент numnumnum ранее не встречался или разница индексов ∣i−j∣>k|i - j| > k∣i−j∣>k, то обновляем словарь. Теперь index_map[num] будет содержать текущий индекс iii.

  5. Возврат результата:

    return False

    Если цикл завершился и подходящие индексы не найдены, возвращается False.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии