Contains Duplicate — HashSet O(n) Solution with All Languages [Easy]

Sanjeev SharmaSanjeev Sharma
3 min read

Advertisement

Problem Statement

Given an integer array nums, return true if any value appears at least twice, and false if every element is distinct.

Examples:

Input: [1, 2, 3, 1]true  (1 appears twice)
Input: [1, 2, 3, 4]false (all distinct)
Input: [1, 1, 1, 3, 3, 4, 3, 2, 4, 2]true

Intuition

Two clean approaches:

  1. Sort then check adjacent — O(n log n), O(1) space
  2. HashSet — O(n) time, O(n) space ← preferred

HashSet approach: Add elements one by one. Before adding, check if it's already in the set.

Solutions in All 5 Languages

C

#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

// Comparison for qsort
int cmp(const void* a, const void* b) {
    return (*(int*)a - *(int*)b);
}

bool containsDuplicate(int* nums, int numsSize) {
    // Sort approach O(n log n)
    qsort(nums, numsSize, sizeof(int), cmp);
    for (int i = 1; i < numsSize; i++) {
        if (nums[i] == nums[i-1]) return true;
    }
    return false;
}

C++

#include <vector>
#include <unordered_set>
using namespace std;

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_set<int> seen;
        for (int num : nums) {
            if (seen.count(num)) return true;
            seen.insert(num);
        }
        return false;
    }
};

Java

import java.util.HashSet;
import java.util.Set;

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> seen = new HashSet<>();
        for (int num : nums) {
            if (!seen.add(num)) return true; // add() returns false if already present
        }
        return false;
    }
}

JavaScript

function containsDuplicate(nums) {
    const seen = new Set();
    for (const num of nums) {
        if (seen.has(num)) return true;
        seen.add(num);
    }
    return false;
    // One-liner: return nums.length !== new Set(nums).size;
}

Python

from typing import List

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        return len(nums) != len(set(nums))
        # Or explicit:
        # seen = set()
        # for num in nums:
        #     if num in seen: return True
        #     seen.add(num)
        # return False

Complexity Analysis

ApproachTimeSpace
Sort + scanO(n log n)O(1)
HashSetO(n)O(n)

Follow-ups (Amazon asks these)

Q: Contains Duplicate II — within k distance?

def containsNearbyDuplicate(nums, k):
    window = set()
    for i, num in enumerate(nums):
        if num in window: return True
        window.add(num)
        if len(window) > k: window.remove(nums[i - k])
    return False

Q: Find all duplicates in an array — O(n) time, O(1) space? Use index negation: mark nums[|num|-1] negative. If already negative, it's a duplicate.

Next: Problem 4 — Maximum Subarray (Kadane's)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro