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 the key already exists in the map, update the corresponding value.
int get(int key) returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.
void remove(key) removes the key and its corresponding value if the map contains the mapping for the key.
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 104 calls will be made to put, get, and remove.
Solutions
Solution 1
1 2 3 4 5 6 7 8 910111213141516171819
classMyHashMap:def__init__(self):self.data=[-1]*1000001defput(self,key:int,value:int)->None:self.data[key]=valuedefget(self,key:int)->int:returnself.data[key]defremove(self,key:int)->None:self.data[key]=-1# Your MyHashMap object will be instantiated and called as such:# obj = MyHashMap()# obj.put(key,value)# param_2 = obj.get(key)# obj.remove(key)
classMyHashMap{privateint[]data=newint[1000001];publicMyHashMap(){Arrays.fill(data,-1);}publicvoidput(intkey,intvalue){data[key]=value;}publicintget(intkey){returndata[key];}publicvoidremove(intkey){data[key]=-1;}}/** * Your MyHashMap object will be instantiated and called as such: * MyHashMap obj = new MyHashMap(); * obj.put(key,value); * int param_2 = obj.get(key); * obj.remove(key); */
classMyHashMap{public:intdata[1000001];MyHashMap(){memset(data,-1,sizeofdata);}voidput(intkey,intvalue){data[key]=value;}intget(intkey){returndata[key];}voidremove(intkey){data[key]=-1;}};/** * Your MyHashMap object will be instantiated and called as such: * MyHashMap* obj = new MyHashMap(); * obj->put(key,value); * int param_2 = obj->get(key); * obj->remove(key); */
typeMyHashMapstruct{data[]int}funcConstructor()MyHashMap{data:=make([]int,1000010)fori:=rangedata{data[i]=-1}returnMyHashMap{data}}func(this*MyHashMap)Put(keyint,valueint){this.data[key]=value}func(this*MyHashMap)Get(keyint)int{returnthis.data[key]}func(this*MyHashMap)Remove(keyint){this.data[key]=-1}/** * Your MyHashMap object will be instantiated and called as such: * obj := Constructor(); * obj.Put(key,value); * param_2 := obj.Get(key); * obj.Remove(key); */
classMyHashMap{data:Array<number>;constructor(){this.data=newArray(10**6+1).fill(-1);}put(key:number,value:number):void{this.data[key]=value;}get(key:number):number{returnthis.data[key];}remove(key:number):void{this.data[key]=-1;}}/** * Your MyHashMap object will be instantiated and called as such: * var obj = new MyHashMap() * obj.put(key,value) * var param_2 = obj.get(key) * obj.remove(key) */