第二十五天(图)(设计)
今天完成题目:1042,1663,706,705,1658 1042:不邻接植花
bfs遍历花
```python
from collections import defaultdict
dict1 = defaultdict(int) dict2 = defaultdict(set) dict3 = defaultdict(str) dict4 = defaultdict(list)
如果key为空,返回int,set,str,list的默认空值
1663:动物收容所
- 双向队列deque
- 出队时候,记得先判断有无队
- 而后通过popleft()
706:设计哈希映射
- 通过数组+取模的方法设计哈希映射
- 哈希元素使用数组的方法
- 哈希表的长度推荐用质数,可以减少冲突
- for index, val in enumerate(list) 可以获取索引和值.
- del list[index] 可以删除指定元素
705:设计哈希集合
- 跟哈希映射一样,但是在哈希元素的实现上,可以使用链表的方法,更方便插入,删除
```python
class MyHashSet:
def __init__(self):
"""
Initialize your data structure here.
"""
self.keyRange = 769 # 质数
self.bucketArray = [Bucket() for i in range(self.keyRange)]
def _hash(self, key):
return key % self.keyRange
def add(self, key: int) -> None:
bucketIndex = self._hash(key)
self.bucketArray[bucketIndex].insert(key)
def remove(self, key: int) -> None:
bucketIndex = self._hash(key)
self.bucketArray[bucketIndex].delete(key)
def contains(self, key: int) -> bool:
"""
Returns true if this set contains the specified element
"""
bucketIndex = self._hash(key)
return self.bucketArray[bucketIndex].exists(key)
class Node:
def __init__(self, value, nextNode=None):
self.value = value
self.next = nextNode
class Bucket:# 在头部插入
'''
哈希集合的元素
'''
def __init__(self):
self.head = Node(-1)
def exists(self, val):
cur = self.head.next
while cur!=None:
if cur.value==val:
return True
cur = cur.next
return False
def insert(self, newVal):
if not self.exists(newVal):
newNode = Node(newVal, self.head.next)
self.head.next = newNode
def delete(self, val):
pre = self.head
cur = self.head.next
while cur is not None:
if cur.value == val:
pre.next = cur.next
return
pre = cur
cur = cur.next
1658:三合一
设计三个栈
self.tripleStack = [None]*stackSize*3 self.top = [0, stackSize , stackSize*2] # 栈顶指针,也是下一个数据的存放位置 self.roof = [stackSize, stackSize*2, stackSize*3] # 栈顶指针最大位置 self.bottom = [0, stackSize, stackSize*2] # 栈顶指针最小位置
注意,peek函数,也需要按照pop的方法判断,只不过是不删元素.
最后更新于
这有帮助吗?