派对的最大快乐值
題目:
員工信息定義如下:
class Employee{public int happy; //這名員工帶來的快樂值List<Employee> subordinates; //這名員工有哪些直屬下級}公司的每個(gè)員工都符合Employee類的描述。整個(gè)公司人員結(jié)構(gòu)可以看作是一顆標(biāo)準(zhǔn)的,沒有環(huán)的多叉樹。樹的頭節(jié)點(diǎn)是公司的唯一的老板,除老板外,每個(gè)員工都有唯一的直接上級。葉節(jié)點(diǎn)是沒有任何下屬的基層員工,除基層員工外,每個(gè)員工都有一個(gè)或多個(gè)直接下級
這個(gè)公司現(xiàn)在要辦party,你可以決定那些員工來,哪些員工不來,但是要遵循如下規(guī)則:
1、如果某個(gè)員工來了,那么這個(gè)員工的所有直接下級都不能來
2、派對的整體快樂值是所有到場員工快樂值的累加
3、你的目標(biāo)是讓派對的整體快樂值最大
給定一個(gè)頭節(jié)點(diǎn)boss,請返回派對的最大快樂值
要求:如果以boss為頭節(jié)點(diǎn)的整棵樹有N個(gè)節(jié)點(diǎn),請做到時(shí)間復(fù)雜度為O(N)
def process(head):yeshead = head.happynohead = 0 if len(head.subordinates) == 0:return [yeshead,nohead]else:for item in head.subordinates:yeshead += process(item)[1]nohead += max(process(item)[0],process(item)[1])return [yeshead,nohead]def getMaxhappy(head):return max(process(head)[0],process(head)[1])?
總結(jié)
- 上一篇: 二叉树节点间的最大距离
- 下一篇: 判断二叉树是否是平衡二叉树(dp tre