LC每日一题|20240415 - 706. 设计哈希映射

62 阅读1分钟

LC每日一题|20240415 - 706. 设计哈希映射

不使用任何内建的哈希表库设计一个哈希映射(HashMap)。

实现 MyHashMap 类:

  • MyHashMap() 用空映射初始化对象
  • void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value
  • int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1
  • void remove(key) 如果映射中存在 key 的映射,则移除 key 和它所对应的 value

提示:

  • 0 <= key, value <= 10^6
  • 最多调用 10^4putgetremove 方法

题目级别:Easy

解题思路

和昨天那题差不多。

AC代码

class MyHashMap() {
    
    val MOD = 1003
    val arr = Array<Node>(MOD) { Node(-1, -1) }
    

    fun put(key: Int, value: Int) {
        if (get(key) == -1) {
            val node = Node(key, value)
            node.next = arr[key % MOD]?.next
            arr[key % MOD].next = node
        } else {
            var cur: Node? = arr[key % MOD]
            while (cur != null) {
                if (cur?.key == key) { 
                    cur!!.value = value
                    break
                }
                cur = cur?.next
            }
        }
    }

    fun get(key: Int): Int {
        var cur: Node? = arr[key % MOD]
        while (cur != null) {
            if (cur?.key == key) return cur!!.value
            cur = cur?.next
        }
        return -1
    }

    fun remove(key: Int) {
        var cur: Node? = arr[key % MOD]
        while (cur != null) {
            if (cur?.next?.key == key) {
                cur?.next = cur?.next?.next
                return
            }
            cur = cur?.next
        }
    }

    data class Node(val key: Int, var value: Int) {
        var next: Node? = null
        }
    
}

/**
 * Your MyHashMap object will be instantiated and called as such:
 * var obj = MyHashMap()
 * obj.put(key,value)
 * var param_2 = obj.get(key)
 * obj.remove(key)
 */