Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Design HashSet

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "705" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Design a HashSet without using any built-in hash table libraries. Implement MyHashSet class: void add(key) Inserts the value key into the HashSet. bool contains(key) Returns whether the value key exists in the HashSet or not. void remove(key) Removes the value key in the HashSet. If key does not exist in the HashSet, do nothing. Example 1: Input ["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"] [[], [1], [2], [1], [3], [2], [2], [2], [2]] Output [null, null, null, true, false, null, true, null, false] Explanation MyHashSet myHashSet = new MyHashSet(); myHashSet.add(1); // set = [1] myHashSet.add(2); // set = [1, 2] myHashSet.contains(1); // return True myHashSet.contains(3); // return False, (not found) myHashSet.add(2); // set = [1, 2] myHashSet.contains(2); // return True myHashSet.remove(2); // set = [1] myHashSet.contains(2); // return False, (already removed) Constraints: 0 <= key <= 106 At most 104 calls will be made to add, remove, and contains.

Explanation

  • Bucketing: The HashSet is implemented using an array of buckets. Each bucket is a list (or other suitable data structure) that stores keys that hash to the same index.
    • Hashing: A simple modulo operation (key % number_of_buckets) is used to determine the bucket index for a given key.
    • Collision Handling: When multiple keys hash to the same bucket, they are stored in the list associated with that bucket. add, remove and contains operations iterate through the list to find/modify the key.
  • Runtime Complexity: O(1) average case for add, remove, and contains. O(N) worst case when all keys fall into the same bucket, where N is the number of keys. Storage Complexity: O(N), where N is the number of unique keys added to the HashSet.

Code

    class MyHashSet:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.capacity = 1009  # A prime number for better distribution
        self.buckets = [[] for _ in range(self.capacity)]

    def add(self, key: int) -> None:
        bucket_index = key % self.capacity
        if key not in self.buckets[bucket_index]:
            self.buckets[bucket_index].append(key)

    def remove(self, key: int) -> None:
        bucket_index = key % self.capacity
        if key in self.buckets[bucket_index]:
            self.buckets[bucket_index].remove(key)

    def contains(self, key: int) -> bool:
        """
        Returns true if this set contains the specified element
        """
        bucket_index = key % self.capacity
        return key in self.buckets[bucket_index]


# Your MyHashSet object will be instantiated and called as such:
# obj = MyHashSet()
# obj.add(key)
# obj.remove(key)
# param_3 = obj.contains(key)

More from this blog

C

Chatmagic blog

2894 posts