题目:
Design a HashMap without using any built-in hash table libraries.To be specific, your design should include these functions:
put(key, value)
: Insert a (key, value) pair into the HashMap. If the value already exists in the HashMap, update the value.
get(key)
: Returns the value to which the specified key is mapped, or -1 if this
map contains no mapping for the key.
remove(key)
: Remove the mapping for the value key if this map contains the mapping for the key.
Example:MyHashMap hashMap = new MyHashMap(); hashMap.put(1, 1); hashMap.put(2, 2); hashMap.get(1); // returns 1 hashMap.get(3); // returns -1 (not found) hashMap.put(2,1); // update the existing value hashMap.get(2); // returns 1 hashMap.remove(2); // remove the mapping for 2 hashMap.get(2); // returns -1 (not found)
Note:
All keys and values will be in the range of
[0, 1000000]
.
The number of operations will be in the range of[1, 10000]
.
Please do not use the built-in HashMap library.
解释:
实现一个hashmap。说了不让用自带的库实现,我刚开始怎么还是用dict()了,奇怪…
python代码:
class MyHashMap(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self._dict={}
def put(self, key, value):
"""
value will always be non-negative.
:type key: int
:type value: int
:rtype: void
"""
self._dict[key]=value
def get(self, key):
"""
Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key
:type key: int
:rtype: int
"""
return self._dict[key] if key in self._dict.keys() else -1
def remove(self, key):
"""
Removes the mapping of the specified value key if this map contains a mapping for the key
:type key: int
:rtype: void
"""
if key in self._dict.keys():
del self._dict[key]
# Your MyHashMap object will be instantiated and called as such:
# obj = MyHashMap()
# obj.put(key,value)
# param_2 = obj.get(key)
# obj.remove(key)
不用库函数实现的版本,用一个很长的数组实现:
python代码:
class MyHashMap:
def __init__(self):
"""
Initialize your data structure here.
"""
self.data=[-1]*1000001
def put(self, key, value):
"""
value will always be non-negative.
:type key: int
:type value: int
:rtype: void
"""
self.data[key]=value
def get(self, key):
"""
Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key
:type key: int
:rtype: int
"""
return self.data[key]
def remove(self, key):
"""
Removes the mapping of the specified value key if this map contains a mapping for the key
:type key: int
:rtype: void
"""
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)
c++代码:
class MyHashMap {
public:
vector<int> mydata;
/** Initialize your data structure here. */
MyHashMap() {
mydata=vector<int>(100001,-1);
}
/** value will always be non-negative. */
void put(int key, int value) {
mydata[key]=value;
}
/** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
int get(int key) {
return mydata[key];
}
/** Removes the mapping of the specified value key if this map contains a mapping for the key */
void remove(int key) {
mydata[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);
*/
总结:
vector的初始化不知道为什么不能用传统的方式…
在函数里面可以声明并且初始化,在类里面必须先声明:
在类里面
vector<int> data=vector<int> (1000,-1);
可以
vector<int> data;
可以
vector<int> data(1000,-1);
不行