Learning Outcome
After this lesson, you should be able to identify duplicate detection problems and solve them with a set in one pass.
Problem Statement
Given an integer array nums, return true if any value appears at least twice. Return false if all values are distinct.
| Input | Output | Why |
|---|---|---|
[1, 2, 3, 1] | true | The value 1 appears twice. |
[1, 2, 3, 4] | false | Every value appears once. |
Brute Force Approach
Compare every element with every later element. If any pair has equal values, return true.
This is simple but slow because it performs repeated comparisons, leading to O(n^2) time.
Optimized Approach
Use a set to store values already seen. During the scan, if the current value is already in the set, a duplicate exists.
This turns repeated pair checks into average O(1) membership checks.
Exact Pseudocode
seen = empty set
for value in nums:
if value exists in seen:
return true
add value to seen
return false
Reference Code
class Solution:
def containsDuplicate(self, nums):
seen = set()
for value in nums:
if value in seen:
return True
seen.add(value)
return FalseSample Dry Run
| value | seen before check | Action |
|---|---|---|
| 1 | {} | Add 1 |
| 2 | {1} | Add 2 |
| 3 | {1, 2} | Add 3 |
| 1 | {1, 2, 3} | 1 already exists, return true |
Complexity
| Measure | Value | Reason |
|---|---|---|
| Time | O(n) | Each value is checked once. |
| Space | O(n) | The set may store all values if there are no duplicates. |
Edge Cases
- Empty or single-element array should return
falseif allowed. - Duplicate appears immediately, such as
[1, 1]. - Large negative and positive values.
Interview Checklist
- Use a set when only existence matters.
- Return as soon as a duplicate is found.
- Do not sort if the prompt asks for linear time.
FAQs
Can sorting solve this?
Yes, sort and check neighbors, but that is O(n log n). A set gives average O(n).
Why is space O(n)?
If all values are unique, every value is stored in the set.
What is the core pattern?
Seen-set duplicate detection.