Учитывая целочисленный массив nums, вернуть true, если какое-либо значение встречается не менее двух раз. в массиве и вернуть false, если все элементы различны.
Input: nums = [2 , 9 , 0, 4, 2] Output: true Input: nums = [1 , 9 , 0, 4, 2] Output: false Input: nums = [1 , 1] Output: true
Когда я читаю подсказку, первое, что приходит на ум, — использовать вложенный цикл for для сравнения каждого элемента друг с другом. Хотя этот подход определенно сработает, это решение грубой силы и не самое эффективное, когда речь идет о временной и пространственной сложности.
Пространственная сложность: O(n²) Временная сложность: O(1)
Другой подход будет включать сортировку списка и сравнение каждого элемента с элементом рядом с ним, используя 2 указателя. Этот подход экономит больше места, чем решение грубой силы.
Пространственная сложность: O(n*logn) Временная сложность: O(1)
Идеальным подходом было бы использование хэш-набора. Хэш-набор не может иметь дубликатов, идея состоит в том, чтобы перебирать массив и проверять, существует ли уже текущий элемент внутри набора. Если это так, верните True. Если нет, добавьте его в набор и продолжите цикл. Этот подход жертвует временем в обмен на пространство.
Пространственная сложность: O(n) Временная сложность: O(n)
class Solution: def containsDuplicate(self, nums: List[int]) -> bool: window = set() for num in nums: if num in window: return True window.add(num) return False