706. Design HashMap
Đề Bài
Design a HashMap without using any built-in hash table libraries.
Implement the MyHashMap class:
MyHashMap()initializes the object with an empty map.void put(int key, int value)inserts a(key, value)pair into the HashMap. If thekeyalready exists in the map, update the correspondingvalue.int get(int key)returns thevalueto which the specifiedkeyis mapped, or-1if this map contains no mapping for thekey.void remove(key)removes thekeyand its correspondingvalueif the map contains the mapping for thekey.
Example 1:
Input ["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"] [[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]] Output [null, null, null, 1, -1, null, 1, null, -1] Explanation MyHashMap myHashMap = new MyHashMap(); myHashMap.put(1, 1); // The map is now [[1,1]] myHashMap.put(2, 2); // The map is now [[1,1], [2,2]] myHashMap.get(1); // return 1, The map is now [[1,1], [2,2]] myHashMap.get(3); // return -1 (i.e., not found), The map is now [[1,1], [2,2]] myHashMap.put(2, 1); // The map is now [[1,1], [2,1]] (i.e., update the existing value) myHashMap.get(2); // return 1, The map is now [[1,1], [2,1]] myHashMap.remove(2); // remove the mapping for 2, The map is now [[1,1]] myHashMap.get(2); // return -1 (i.e., not found), The map is now [[1,1]]
Constraints:
0 <= key, value <= 106- At most
104calls will be made toput,get, andremove.
Thuật Toán & Kỹ Thuật
⏱️ Thời gian
O(n)
💾 Không gian
O(n)
Lời Giải
Python
0706-design-hashmap.py
class ListNode:
def __init__(self, key: int, value: int):
self.key = key
self.value = value
self.next = None
class MyHashMap:
def __init__(self):
self.constMaxN = 19997
self.contains = [None for _ in range(self.constMaxN)]
def hashing(self, key: int) -> int:
return key % self.constMaxN
def put(self, key: int, value: int) -> None:
self.remove(key)
h = self.hashing(key)
if self.contains[h] == None:
self.contains[h] = ListNode(key, value)
else:
head = self.contains[h]
newNode = ListNode(key, value)
newNode.next = head
self.contains[h] = newNode
def get(self, key: int) -> int:
h = self.hashing(key)
currNode = self.contains[h]
while currNode:
if currNode.key == key:
return currNode.value
currNode = currNode.next
return -1
def remove(self, key: int) -> None:
h = self.hashing(key)
head = self.contains[h]
if head == None:
return
if head.key == key:
self.contains[h] = head.next
return
currNode = head
while currNode.next:
if currNode.next.key == key:
currNode.next = currNode.next.next
return
currNode = currNode.next
# Your MyHashMap object will be instantiated and called as such:
# obj = MyHashMap()
# obj.put(key,value)
# param_2 = obj.get(key)
# obj.remove(key)