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
My Solution
We can solve this by iterating through the array and adding each element to a HashSet. If we ever see an element which is already in the HashSet, we return true because we have found a duplicate. If we reach the end of the array without seeing a duplicate we return false.
Time complexity would be O(n) because we iterate through the array once. Space complexity is also O(n) because we require O(n) space for the HashSet.
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> distinct = new HashSet<>();
for (int num : nums) {
if (distinct.contains(num)) {
return true;
}
distinct.add(num);
}
return false;
}
}