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^4次put、get和remove方法
题目级别: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)
*/