网易首页 > 网易号 > 正文 申请入驻

2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏

0
分享至

2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。

游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值。勇者们有一次机会可以击破一个节点泡泡,但需要满足以下规则:

被击破的节点泡泡最多只能有一个子节点泡泡。

如果被击破的节点泡泡有子节点泡泡,那么这个子节点泡泡将会取代被击破泡泡的位置,也就是说,整棵以被击破泡泡为根的子树将会上移。

我们的任务是计算在进行了这样一个击破操作(或选择不击破任何节点)后,这棵二叉泡泡树的最大「层和」是多少。

这里的「层和」是指:在同一高度的所有节点泡泡的分值之和。

输入:root = [6,0,3,null,8]。

输出:11。

答案2024-04-17:

来自左程云。

灵捷3.5

大体步骤如下:

1.定义节点结构体和信息结构体。

TreeNode

Info

2.定义全局变量和,分别代表每个层级的信息和待处理的节点。

levelInfos

jobs

3.定义作业结构体,包含节点的ID和层级。

Job

4.实现函数,计算二叉泡泡树的最大层和。

getMaxLayerSum

5.在函数中,初始化全局变量,计算树的高度。

getMaxLayerSum

6.遍历每个层级,计算该层级最后一个节点的分值和。

7.遍历所有待处理的节点,根据节点的ID、层级和左右边界,计算当前层级的节点和下一层级的节点。

8.根据题目描述的规则,更新最大层和的结果。

9.返回最终的最大层和。

总的时间复杂度为 O(N),其中 N 是节点的数量。

总的额外空间复杂度为 O(H),其中 H 是树的高度。

Go完整代码如下:

packagemain
import(
"fmt"
"math"
)
typeTreeNodestruct{
Valint
Left*TreeNode
Right*TreeNode
}
typeInfostruct{
preSumint
leftint
rightint
finshIdint
}
varlevelInfos[][]Info
varjobs[]Job
typeJobstruct{
nodeIdint
levelint
}
funcgetMaxLayerSum(root*TreeNode)int{
levelInfos=nil
jobs=nil
process(root,0)
height:=len(levelInfos)-1
ans:=math.MinInt64
forlevel:=0;levellevelList:=levelInfos[level]
ans=max(ans,levelList[len(levelList)-1].preSum)
}
forid:=0;idjob:=jobs[id]
nodeId:=job.nodeId
level:=job.level
left:=nodeId
right:=nodeId
curLevelSum:=levelInfos[level][left].preSum-levelInfos[level][left-1].preSum
for;levelifleft>right{
break
}
levelList:=levelInfos[level]
ifright-left+1==len(levelList)-1{
break
}
leftInfo:=levelList[left]
rightInfo:=levelList[right]
nextLeft:=leftInfo.left
nextRight:=rightInfo.right
curLevelAll:=levelList[len(levelList)-1].preSum
ifleftInfo.finshId!=-1&&leftInfo.finshId==rightInfo.finshId{
break
}
leftInfo.finshId=rightInfo.finshId
nextLevelSum:=0
ifnextLeft<=nextRight{
nextLevelSum=levelInfos[level+1][nextRight].preSum-levelInfos[level+1][nextLeft-1].preSum
}
ans=max(ans,curLevelAll-curLevelSum+nextLevelSum)
left=nextLeft
right=nextRight
curLevelSum=nextLevelSum
}
}
returnans
}
funcprocess(cur*TreeNode,levelint)bool{
ifcur==nil{
returnfalse
}
forlevel+1>=len(levelInfos){
levelInfos=append(levelInfos,[]Info{{0,-1,-1,-1}})
}
levelList:=levelInfos[level]
preId:=len(levelList)-1
levelList=append(levelList,Info{levelList[preId].preSum+cur.Val,len(levelInfos[level+1]),-1,-1})
levelInfos[level]=levelList
hasLeft:=process(cur.Left,level+1)
hasRight:=process(cur.Right,level+1)
nodeId:=len(levelList)-1
if!hasLeft||!hasRight{
jobs=append(jobs,Job{nodeId,level})
}
levelList[nodeId].right=len(levelInfos[level+1])-1
returntrue
}
funcmax(a,bint)int{
ifa>b{
returna
}
returnb
}
funcmain(){
root:=&TreeNode{
Val:6,
Left:&TreeNode{
Val:0,
Right:&TreeNode{Val:8},
},
Right:&TreeNode{
Val:3,
},
}
result:=getMaxLayerSum(root)
fmt.Println(result)
}



Python完整代码如下:

#-*-coding:utf-8-*-
classTreeNode:
def__init__(self,val=0,left=None,right=None):
self.val=val
self.left=left
self.right=right
classInfo:
def__init__(self,preSum=0,left=-1,right=-1,finshId=-1):
self.preSum=preSum
self.left=left
self.right=right
self.finshId=finshId
levelInfos=[]
jobs=[]
classJob:
def__init__(self,nodeId,level):
self.nodeId=nodeId
self.level=level
defgetMaxLayerSum(root):
globallevelInfos,jobs
levelInfos=[]
jobs=[]
process(root,0)
height=len(levelInfos)-1
ans=float('-inf')
forlevelinrange(height):
levelList=levelInfos[level]
ans=max(ans,levelList[-1].preSum)
foridinrange(len(jobs)):
job=jobs[id]
nodeId=job.nodeId
level=job.level
left=nodeId
right=nodeId
curLevelSum=levelInfos[level][left].preSum-levelInfos[level][left-1].preSum
whilelevelifleft>right:
break
levelList=levelInfos[level]
ifright-left+1==len(levelList)-1:
break
leftInfo=levelList[left]
rightInfo=levelList[right]
nextLeft=leftInfo.left
nextRight=rightInfo.right
curLevelAll=levelList[-1].preSum
ifleftInfo.finshId!=-1andleftInfo.finshId==rightInfo.finshId:
break
leftInfo.finshId=rightInfo.finshId
nextLevelSum=0
ifnextLeft<=nextRight:
nextLevelSum=levelInfos[level+1][nextRight].preSum-levelInfos[level+1][nextLeft-1].preSum
ans=max(ans,curLevelAll-curLevelSum+nextLevelSum)
left=nextLeft
right=nextRight
curLevelSum=nextLevelSum
level+=1
returnans
defprocess(cur,level):
globallevelInfos,jobs
ifcurisNone:
returnFalse
whilelevel+1>=len(levelInfos):
levelInfos.append([Info(0,-1,-1,-1)])
levelList=levelInfos[level]
preId=len(levelList)-1
levelList.append(Info(levelList[preId].preSum+cur.val,len(levelInfos[level+1]),-1,-1))
hasLeft=process(cur.left,level+1)
hasRight=process(cur.right,level+1)
nodeId=len(levelList)-1
ifnothasLeftornothasRight:
jobs.append(Job(nodeId,level))
levelList[nodeId].right=len(levelInfos[level+1])-1
returnTrue
root=TreeNode(6)
root.left=TreeNode(0)
root.left.right=TreeNode(8)
root.right=TreeNode(3)
result=getMaxLayerSum(root)
print(result)



声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
死亡超25万!美国疫情太惨:死亡浪潮被认为已到来,未来会翻倍

死亡超25万!美国疫情太惨:死亡浪潮被认为已到来,未来会翻倍

小易乡野记事呀
2024-06-04 04:40:11
十万火急,A股两亿股民不要被骗,今天周三一定这样走!

十万火急,A股两亿股民不要被骗,今天周三一定这样走!

静守时光落日
2024-06-05 03:15:02
女子趁理发师工作时,伸手摸向敏感部位,网友调侃:这钱真难赚

女子趁理发师工作时,伸手摸向敏感部位,网友调侃:这钱真难赚

看晓天下事
2024-05-26 18:38:25
足坛狂欢夜!B费梅开二度,葡萄牙4-2,意大利0-0爆大冷,瑞士4-0

足坛狂欢夜!B费梅开二度,葡萄牙4-2,意大利0-0爆大冷,瑞士4-0

侧身凌空斩
2024-06-05 05:15:09
江西人妻出轨门震惊全网!不雅行为曝光:2个人的床上,睡着5个人

江西人妻出轨门震惊全网!不雅行为曝光:2个人的床上,睡着5个人

揉碎夏的诗
2024-06-03 14:10:02
要考虑乌克兰人民生命的价值,他们在为什么而战呢?

要考虑乌克兰人民生命的价值,他们在为什么而战呢?

翻开历史和现实
2024-06-04 13:58:10
上海五星豪华邮轮上最丑陋的一幕,炸出了多少精神饥饿的“穷人”

上海五星豪华邮轮上最丑陋的一幕,炸出了多少精神饥饿的“穷人”

鬼谷子思维
2024-04-21 18:46:24
60岁的夫妻,一周同房几次比较好?60岁绝经大姐一周一次,如何?

60岁的夫妻,一周同房几次比较好?60岁绝经大姐一周一次,如何?

39健康网
2024-05-19 23:20:03
辽宁省人大常委会原副主任、党组成员刘曾浩

辽宁省人大常委会原副主任、党组成员刘曾浩

手工制作阿歼
2024-06-04 22:31:02
《庆余年3》即将开机,十大主演人选公布,新叶灵儿人选很惊喜

《庆余年3》即将开机,十大主演人选公布,新叶灵儿人选很惊喜

娱乐倾城巷
2024-06-04 09:28:29
郭艾伦启程美国!坐公务舱+自我调侃,发文期待与范志毅再度合作

郭艾伦启程美国!坐公务舱+自我调侃,发文期待与范志毅再度合作

室内设计师阿喇
2024-06-04 22:07:54
79年女知青返城前夜解开衣扣,把自己给了乡下小伙多年后再见

79年女知青返城前夜解开衣扣,把自己给了乡下小伙多年后再见

牛锅巴小钒
2024-06-04 17:17:57
朝鲜副国级高官叛逃脱北,曝光金家秘闻:酒池肉林、80万买轩尼诗

朝鲜副国级高官叛逃脱北,曝光金家秘闻:酒池肉林、80万买轩尼诗

猫眼观史
2024-03-25 14:31:14
没想到老年人的瓜这么多!网友的评论太炸裂,我小脑都萎缩了

没想到老年人的瓜这么多!网友的评论太炸裂,我小脑都萎缩了

夢婷
2024-01-05 12:09:08
董军行程结束,登机回国前送出7句话,美国终于弄懂中方意思。

董军行程结束,登机回国前送出7句话,美国终于弄懂中方意思。

说天说地说实事
2024-06-04 17:28:52
余承东不用嘲笑了,180万特斯拉车主,能扔掉手机支架了

余承东不用嘲笑了,180万特斯拉车主,能扔掉手机支架了

互联网.乱侃秀
2024-06-04 12:24:53
美国公开施压中国,要求中国同意布林肯访华,中方立场很清楚

美国公开施压中国,要求中国同意布林肯访华,中方立场很清楚

农村一级野钓大师呀
2024-06-04 10:40:15
24小时,美国下2道挑战书,中国银行或被踢走,中方加速运回黄金

24小时,美国下2道挑战书,中国银行或被踢走,中方加速运回黄金

大白话瞰世界
2024-06-03 09:40:51
江苏一男子拜佛后买彩票未中,怒砸24尊佛像,一周后报应来了

江苏一男子拜佛后买彩票未中,怒砸24尊佛像,一周后报应来了

一个人讲故事
2024-05-09 20:14:26
2024高考将是“最残酷”的一届,高考复读生超400万,创历史新高

2024高考将是“最残酷”的一届,高考复读生超400万,创历史新高

C妈学堂
2024-06-03 14:07:02
2024-06-05 06:24:49
moonfdd
moonfdd
福大大架构师每日一题
411文章数 7关注度
往期回顾 全部

科技要闻

斯坦福团队抄袭国产大模型后道歉 承诺撤下

头条要闻

5岁女童在机构练舞蹈摔倒致高位截瘫:只拿到20万赔偿

头条要闻

5岁女童在机构练舞蹈摔倒致高位截瘫:只拿到20万赔偿

体育要闻

从英国联赛到NBA,两个美国人相爱相杀

娱乐要闻

杨幂留言为热巴庆生,姐妹情深惹人羡

财经要闻

卷走53亿 浙江富豪全家跑路了

汽车要闻

2.0T+云辇-P+天神之眼 方程豹豹8还配软包内装

态度原创

手机
时尚
艺术
公开课
军事航空

手机要闻

三强争霸!一加13、OPPO Find X8、真我GT7 Pro,谁更值得期待?

裙子配运动鞋,放松穿最好看!

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

公开课

近视只是视力差?小心并发症

军事要闻

俄车臣特种部队已转至哈尔科夫 指挥官:进入决战阶段

无障碍浏览 进入关怀版