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

Prompts.js

via Simon Willison

Paintings of the Coast of California 1

From Albert Bierstadt's visit to the Farallon Islands in 1872, to George Bellows in 1917, with paintings from Mannheim, Granville Redmond and others in between.

via The Eclectic Light Company

How I write essays

Notes on process

via Henrik Karlsson