Contains Duplicate — HashSet O(n) Solution with All Languages [Easy]
Advertisement
Problem Statement
Given an integer array
nums, returntrueif any value appears at least twice, andfalseif 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
- Solutions in All 5 Languages
- C
- C++
- Java
- JavaScript
- Python
- Complexity Analysis
- Follow-ups (Amazon asks these)
Intuition
Two clean approaches:
- Sort then check adjacent — O(n log n), O(1) space
- 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
| Approach | Time | Space |
|---|---|---|
| Sort + scan | O(n log n) | O(1) |
| HashSet | O(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.
Advertisement