217. Contains Duplicate
Description
Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.
Example 1:
Input: nums = [1,2,3,1]
Output: true
Explanation:
The element 1 occurs at the indices 0 and 3.
Example 2:
Input: nums = [1,2,3,4]
Output: false
Explanation:
All elements are distinct.
Example 3:
Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true
Constraints:
1 <= nums.length <= 105-109 <= nums[i] <= 109
Solutions
Solution 1: Sorting
Thinking
Comparing every pair works but is slow for large \(n\). Equal values become adjacent after sorting.
Sort the array, then check whether any two neighbors are equal.
First, we sort the array nums.
Then, we traverse the array. If there are two adjacent elements that are the same, it means that there are duplicate elements in the array, and we directly return true.
Otherwise, when the traversal ends, we return false.
The time complexity is \(O(n \times \log n)\), where \(n\) is the length of the array nums.
1 2 3 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Solution 2: Hash Table
Thinking
Sorting is \(O(n\log n)\) and reorders the array. Membership alone can be tracked with a hash set in one pass.
A value that is already in the set is a duplicate.
We traverse the array and record the elements that have appeared in the hash table \(s\). If an element appears for the second time, it means that there are duplicate elements in the array, and we directly return true.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\), where \(n\) is the length of the array nums.
1 2 3 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 | |
1 2 3 4 5 6 | |