1.第一题:
这道题一开始用回溯,时间超时,优化了一下还是时间超时,最后看了官方题解发现是个数学题,害,只需要一次遍历,k个板子总共有k+1种组合方案,最后推导出来的式子是shorter*(k-i)+longer*i,长知识了长知识了,代码如下:
class Solution:
def divingBoard(self, shorter: int, longer: int, k: int) -> List[int]:
demo=[]
if k==0:
return []
if shorter==longer:
return [shorter*k]
for i in range(k+1):
demo.append(shorter*(k-i)+longer*i)
return demo
2.
这道题是一道广度优先的题目,先将对应的重要度和下属分别保存下来,利用广度优先求出对应id的员工的所有下属,在将重要度全部相加即可,代码如下:
class Solution:
def getImportance(self, employees: List['Employee'], id: int) -> int:
importance={e.id:e.importance for e in employees}
subordinates={e.id:e.subordinates for e in employees}
def get_subordinates(id):
all_staff=[]
queue=[id]
while queue:
staff=queue.pop(0)#队头元素出队
all_staff.append(staff)
queue.extend(subordinates[staff])#该员工的下属批量入队
return all_staff
return sum([importance[staff] for staff in get_subordinates(id)])