본문 바로가기
LeetCode/Array & Hashing

[LeetCode][Kotlin] 705. Design HashSet

by jinwo_o 2024. 8. 16.

705. Design HashSet

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.
내장된 해시 테이블 라이브러리를 사용하지 않고 HashSet을 디자인합니다.

MyHashSet 클래스 구현:
- void add(key) HashSet에 value 키를 삽입합니다.
- bool contains(key) HashSet에 value 키가 있는지 여부를 반환합니다.
- void remove(key) HashSet에서 value 키를 제거합니다. 키가 HashSet에 없으면 아무것도 하지 않습니다.

 

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 <= 10^6
  • At most 104 calls will be made to add, remove, and contains.

코드

class MyHashSet() {

    class ListNode(val value: Int = -1) {
        var next: ListNode? = null
    }

    val set = Array(10000) { ListNode() }

    fun add(key: Int) {
        var cur = set[key % set.size]
        while (cur.next != null) {
            if (cur.next?.value == key) {
                return
            }
            cur = cur.next!!
        }
        cur.next = ListNode(key)
    }

    fun remove(key: Int) {
        var cur = set[key % set.size]
        while (cur.next != null) {
            if (cur.next?.value == key) {
                cur.next = cur.next?.next
                return
            }
            cur = cur.next!!
        }
    }

    fun contains(key: Int): Boolean {
        var cur = set[key % set.size]
        while (cur.next != null) {
            if (cur.next?.value == key) {
                return true
            }
            cur = cur.next!!
        }
        return false
    }
}