Leetcode 705设计哈希集合
参考链接在时间空间上做权衡
学习上面链接大佬的,如果你刷到了这篇博客,可以直接点上面链接看大佬的题解,太优秀了,我也是搬过来学习的
超大数组
class MyHashSet:
def __init__(self):
self.set = [False]*1000001
def add(self,key):
self.set[key] = True
def remove(self,key):
self.set[key] = False
def contains(self,key):
self.set[key]
拉链法
定长拉链法
class MyHashSet:
def __init__(self):
self.buckets = 1000
self.itemsPerBucket = 1001
self.table = [[] for _ in range(self.buckets)]
def hash(self,key):
return key % self.buckets
def pos(self,key):
return key // self.buckets
def add(self,key):
hashkey = self.hash(key)
if not self.table[hashkey]:
self.table[hashkey] = [0]*self.itemsPerBucket
self.table[hashkey][set.pos(key)] = 1
def remove(self,key):
hashkey = self.hash(key)
if self.table[hashkey]:
self.table[hashkey][self.pos(key)] = 0
def contains(self,key):
hashkey = self.hash(key)
return (self.table[hashkey] !=[]) and (self.table[hashkey][self.pos(key)]==1)
不定长数组
class MyHashSet:
def __init__(self):
self.buckets = 1009
self.table = [[] for _ in range(self.buckets)]
def hash(self, key):
return key % self.buckets
def add(self, key):
hashkey = self.hash(key)
if key in self.table[hashkey]:
return
self.table[hashkey].append(key)
def remove(self, key):
hashkey = self.hash(key)
if key not in self.table[hashkey]:
return
self.table[hashkey].remove(key)
def contains(self, key):
hashkey = self.hash(key)
return key in self.table[hashkey]