217. Содержит дубликат — Leetcode Easy


Постановка задачи

Задав целочисленный массив nums, верните true, если любое значение встречается в массиве как минимум дважды, и верните false, если каждый элемент дублируется.

Example 1:

Input: nums = [1,2,3,1]
Output: true
Войти в полноэкранный режим Выход из полноэкранного режима
Example 2:

Input: nums = [1,2,3,4]
Output: false
Войти в полноэкранный режим Выход из полноэкранного режима

Подход 1 (грубая сила)

Давайте каждый раз выбирать элемент в массиве. Теперь посмотрим в оставшемся массиве, существует ли еще какой-нибудь элемент с таким же значением или нет. Если он существует, возвращаем true. В противном случае — false.

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        for i in range(len(nums)-1):
            for j in range(i+1, len(nums)):
                if nums[i] == nums[j]:
                    return True
        return False
Вход в полноэкранный режим Выход из полноэкранного режима

Временная сложность: O(n^2) — из-за вложенных циклов for.
Пространственная сложность: O(1).

Подход 2

Если мы отсортируем входной массив, то все дублирующиеся элементы будут расположены рядом друг с другом. Мы можем пройтись по массиву и проверить соседние элементы, одинаковые они или нет. Если найдена одна такая пара, можно вернуть true.

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        nums.sort()
        for i in range(len(nums)-1):
            if nums[i] == nums[i+1]:
                return True

        return False
Вход в полноэкранный режим Выход из полноэкранного режима

Временная сложность: O(n log n) — из-за сортировки.
Пространственная сложность: O(1).

Подход 3

Давайте пройдемся итерациями по массиву и продолжим добавлять каждый элемент в хэшсет. При этом перед добавлением необходимо проверить, присутствует ли этот элемент в хэшсете. Эта операция проверки занимает O(1) времени, так как это хэшсет. Если мы нашли один такой элемент, мы можем вернуть true.

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        hashSet = set()
        for n in nums:
            if n in hashSet:
                return True
            else:
                hashSet.add(n)

        return False
Вход в полноэкранный режим Выход из полноэкранного режима

Временная сложность: O(n) — только один цикл for.
Пространственная сложность: O(n) — для дополнительного хэшсета.

Заключение

Сообщите мне, если я упустил какой-либо другой подход.

Следите за мной, чтобы получить больше подобных объяснений.
Давайте общаться на: Twitter LinkedIn Showwcase

Оцените статью
devanswers.ru
Добавить комментарий