Contains Duplicate

Problem

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
Example 2:

Input: nums = [1,2,3,4]
Output: false
Example 3:

Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true

Constraints:

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

Solution

There are a few ways to go about this. If the array were sorted this could be done in O(n) time with O(1) space, but unfortunately a sorted array is not guarenteed.

Naive

class Solution {
    // naive solution will be O(n^2)
    // sorting the array beforehand would make this O(n*log(n)) with O(n) verification
    // we could use a HashMap (or HashSet). O(1) insert/lookup in the average case, O(n) worst case
    // will use O(n) storage
    public boolean containsDuplicate(int[] nums) {
        var set = new HashSet<Integer>();
        for (int i = 0; i < nums.length; i++) {
            var val = nums[i];
            if (set.contains(val)) {
                return true;
            }
            set.add(val);
        }
        return false;
    }
}

Recent posts from blogs that I like

Without looking it up, what do you think?

+ links

via Henrik Karlsson

Canals of Venice 1903-1910

Pointillisme in the city, with Henri-Edmond Cross and Paul Signac, with more by John Singer Sargent, in the early years of the 20th century.

via The Eclectic Light Company

Running Llama 3.2 Vision and Phi-3.5 Vision on a Mac with mistral.rs

via Simon Willison