Программа курса:
Разбор задачи: Содержит дубликат 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— в противном случае.
Пошаговый разбор:
Инициализация:
index_map = {}Создаётся пустой словарь
index_map. Этот словарь будет хранить последние встреченные индексы каждого числа из массиваnums.Итерация по массиву
nums:for i, num in enumerate(nums):Используется цикл
for, чтобы пройти по всем элементам массиваnums. Индекс текущего элемента записывается в переменную iii, а значение элемента — в переменную numnumnum.Проверка условия задачи:
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.- Первое условие:
Обновление словаря:
index_map[num] = iЕсли текущий элемент numnumnum ранее не встречался или разница индексов ∣i−j∣>k|i - j| > k∣i−j∣>k, то обновляем словарь. Теперь
index_map[num]будет содержать текущий индекс iii.Возврат результата:
return FalseЕсли цикл завершился и подходящие индексы не найдены, возвращается
False.