OOD Interview Questions
设计 HashMap
HashMap 面向对象设计示例
这份 notebook 由 Donne Martin 准备。Source 和 license info 在 GitHub。
设计 HashMap
Constraints & assumptions
- 为了简化问题,keys 只考虑 integer 吗?
- Yes
- 处理 collision 时,可以用 chaining 吗?
- Yes
- 需要考虑 load factor 吗?
- No
- 可以假设输入都是 valid,还是需要做 validate?
- Assume they're valid
- 可以假设能放进 memory 吗?
- Yes
Solution
%%writefile hash_map.py
class Item(object):
def __init__(self, key, value):
self.key = key
self.value = value
class HashTable(object):
def __init__(self, size):
self.size = size
self.table = [[] for _ in range(self.size)]
def _hash_function(self, key):
return key % self.size
def set(self, key, value):
hash_index = self._hash_function(key)
for item in self.table[hash_index]:
if item.key == key:
item.value = value
return
self.table[hash_index].append(Item(key, value))
def get(self, key):
hash_index = self._hash_function(key)
for item in self.table[hash_index]:
if item.key == key:
return item.value
raise KeyError('Key not found')
def remove(self, key):
hash_index = self._hash_function(key)
for index, item in enumerate(self.table[hash_index]):
if item.key == key:
del self.table[hash_index][index]
return
raise KeyError('Key not found')