LC每日一题|20240414 - 705. 设计哈希集合

75 阅读1分钟

LC每日一题|20240414 - 705. 设计哈希集合

不使用任何内建的哈希表库设计一个哈希集合(HashSet)。

实现 MyHashSet 类:

  • void add(key) 向哈希集合中插入值 key
  • bool contains(key) 返回哈希集合中是否存在这个值 key
  • void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。

提示:

  • 0 <= key <= 106
  • 最多调用 104addremovecontains

题目级别: Easy

解题思路

我们知道,HashSet的底层是HashMap,而HashMap是基于 数组+链表 的,在此我们只需要简单的实现一下就可以了。

AC代码

class MyHashSet() {

    val MOD = 1003
    val array = Array<LinkedList<Int>>(MOD) { LinkedList() }
    
    fun add(key: Int) {
        if (!contains(key)) {
            val hash = key % MOD
            array[hash].add(key)
        }
    }

    fun remove(key: Int) {   
        val hash = key % MOD
        array[hash].remove(key)
    }

    fun contains(key: Int): Boolean {
        val hash = key % MOD
        return key in array[hash]
    }
}

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