关注
#可以把切割的过程看成二叉树分裂的过程,每种切割法对应一颗二叉树,二叉树的所有内部结点和
#为总开销。只要构造出所有的二叉树,就能找到最小开销。给定的例子测试可行。
#复杂度感觉有点高,具体多少我也分析不来。。。
class TreeNode():
def __init__(self,val):
self.val=val
self.left=None
self.right=None
class Solution():
def leastPay(self,length,array):
trees=self.toTrees(array)
least=length*(length-1)/2
for tree in trees:
least=min(self.toPay(tree),least)
return least
#构造所有可能的二叉树
def toTrees(self,array):
if len(array)==1:
return [TreeNode(array[0])]
trees=[]
leftEs,rightEs=self.divideElements(array)
for leftE,rightE in zip(leftEs,rightEs):
for leftT in self.toTrees(leftE):
for rightT in self.toTrees(rightE):
root=TreeNode(sum(array))
root.left=leftT
root.right=rightT
trees+=[root]
return trees
#把当前剩余元素随机划分到左右两颗子树,返回所有可能的划分情况
def divideElements(self,array):
if len(array)==2:
leftEs=[[array[0]],[array[1]]]
rightEs=[[array[1]],[array[0]]]
return (leftEs,rightEs)
leftEs=[]
rightEs=[]
for i in range(len(array)):
tempLs,tempRs=self.divideElements(array[:i]+array[(i+1):])
for j in range(len(tempLs)):
leftEs+=[tempLs[j]+[array[i]]]
rightEs+=[tempRs[j]]
leftEs+=[tempLs[j]]
rightEs+=[tempRs[j]+[array[i]]]
return (leftEs,rightEs)
#计算每棵树对应的开销
def toPay(self,tree):
if not tree.left and not tree.right:
return 0
elif tree.left and tree.right:
return tree.val+self.toPay(tree.left)+self.toPay(tree.right)
else:
return "ERROR"
查看原帖
点赞 评论
相关推荐
07-23 12:30
北京邮电大学 Java 
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 刚入职就____,这样正常吗? #
34327次浏览 287人参与
# 哪些公司对双非友好 #
61757次浏览 473人参与
# 小红书校招直播来了 #
50145次浏览 225人参与
# 你是怎么和mt相处的? #
32059次浏览 186人参与
# 面试反问你会问什么 #
41943次浏览 582人参与
# 实习返校后,你的精神状态是__? #
22559次浏览 123人参与
# 你朋友圈最大的人脉是谁? #
15209次浏览 118人参与
# 上班苦还是上学苦呢? #
273571次浏览 1727人参与
# 最难的技术面是哪家公司? #
42266次浏览 699人参与
# 关于求职,我有X不投 #
21868次浏览 150人参与
# 实习必须要去大厂吗? #
126864次浏览 1471人参与
# 秋招遇到的奇葩面试题 #
33356次浏览 181人参与
# 这个工作能去吗 #
14567次浏览 113人参与
# 招银网络求职进展汇总 #
135794次浏览 885人参与
# 机械人,你被简历秒挂的企业有哪些? #
57912次浏览 320人参与
# 找工作前vs找工作后的心路变化 #
19048次浏览 151人参与
# 4399求职进展汇总 #
29141次浏览 153人参与
# kpi面有什么特征 #
73001次浏览 455人参与
# 上班到公司第一件事做什么? #
89578次浏览 657人参与
# 机械人,签完三方你在忙什么? #
58848次浏览 228人参与
# 你觉得机械有必要实习吗 #
61294次浏览 476人参与