当前位置: 首页 > news >正文

上海网站建设企b2b免费外链发布

上海网站建设企,b2b免费外链发布,网站制作后台怎么做,html网页素材337.打家劫舍III337.打家劫舍III题解代码337.打家劫舍III 337.打家劫舍III 题解 题目:给一个二叉树,相邻两个节点不能同时选,问能选的节点累加最大的值 思路: 暴力递归 - 最优子结构 1.既然相邻不能选,那么 metho…

337.打家劫舍III

  • 337.打家劫舍III
  • 题解
  • 代码

337.打家劫舍III

337.打家劫舍III

题解

题目:给一个二叉树,相邻两个节点不能同时选,问能选的节点累加最大的值

思路:
暴力递归 - 最优子结构

1.既然相邻不能选,那么
method1:选当前节点以及4个孙子节点
method2:不选当前节点,选两个孩子节点
返回max(method1, method2)

记忆化 - 解决重复子问题

爷爷节点会计算孙子节点
父节点也会计算孙子节点
存在重复子问题,用记忆化解决

动态规划

即使用了记忆化剪枝,还是会超时,所以只能用动态规划了
选择当前节点:当前节点的值+不选左孩子节点+不选右孩子节点
selected[root] = root.Val + notSelected[root.Left] + notSelected[root.Right]
不选当前节点 = max(选左孩子,不选左孩子)+max(选右孩子,不选右孩子)
notSelected[root] = max(selected[root.Left], notSelected[root.Left]) + max(selected[root.Right], notSelected[root.Right])

优化

我们发现递归回去的时候,无论是selected[root]还是notSelected[root]
他们的状态始终与notSelected[root.Left] ,notSelected[root.Right],selected[root.Left],selected[root.Right]4个有关
所以我们可以定义一个长为2的数组,arr[0]代表选,arr[1]代表不选
在每次递归的时候返回给上一级,节省空间复杂度

代码

TLE 暴力递归 - 最优子结构

func rob(root *TreeNode) int {if root == nil {return 0}method1 := root.Valif root.Left != nil {method1 += rob(root.Left.Left) + rob(root.Left.Right)}if root.Right != nil {method1 += rob(root.Right.Left) + rob(root.Right.Right)}method2 := rob(root.Left) + rob(root.Right)return max(method1, method2)
}
func max(i, j int) int {if i > j {return i}return j
}

TLE 记忆化 - 解决重复子问题

func rob(root *TreeNode) int {mp := map[*TreeNode]int{}var dfs func(root *TreeNode) intdfs = func(root *TreeNode) int {if _, ok := mp[root]; ok {return mp[root]}if root == nil {return 0}method1 := root.Valif root.Left != nil {method1 += rob(root.Left.Left) + rob(root.Left.Right)}if root.Right != nil {method1 += rob(root.Right.Left) + rob(root.Right.Right)}method2 := rob(root.Left) + rob(root.Right)mp[root] = max(method1, method2)return mp[root]}return dfs(root)
}
func max(i, j int) int {if i > j {return i}return j
}

动态规划

func rob(root *TreeNode) int {selected := map[*TreeNode]int{}notSelected := map[*TreeNode]int{}var dfs func(root *TreeNode)dfs = func(root *TreeNode) {if root == nil {return}dfs(root.Left)dfs(root.Right)selected[root] = root.Val + notSelected[root.Left] + notSelected[root.Right]notSelected[root] = max(selected[root.Left], notSelected[root.Left]) + max(selected[root.Right], notSelected[root.Right])}dfs(root)return max(selected[root], notSelected[root])
}
func max(i, j int) int {if i > j {return i}return j
}

动态规划-优化

func rob(root *TreeNode) int {var dfs func(root *TreeNode) [2]intdfs = func(root *TreeNode) [2]int { //0选 1不选if root == nil {return [2]int{0, 0}}l := dfs(root.Left)r := dfs(root.Right)selected := root.Val + l[1] + r[1]notSelected := max(l[0], l[1]) + max(r[0], r[1])return [2]int{selected, notSelected}}val := dfs(root)return max(val[0], val[1])
}
func max(i, j int) int {if i > j {return i}return j
}
http://www.lbrq.cn/news/2626291.html

相关文章:

  • 免费的小网站免费自己建网页
  • asp.net企业网站设计seo人员工作内容
  • 网站导航怎么做外链武汉seo管理
  • 做企业网站公司做推广
  • 霞山手机网站建设公司中国刚刚发生的新闻
  • 虚拟机怎么做多个网站百度seo插件
  • 外贸有哪些网站西安网站制作
  • ps做网站首页怎么国际新闻 军事
  • 云匠网要交钱才能用吗广州aso优化公司 有限公司
  • 阿里巴巴的网站应该怎么做北京营销型网站
  • alipay域名网站什么是搜索引擎优化seo
  • 可以做动态图表的网站百度官方网站
  • 车辆保险网站无货源电商怎么做
  • 计算机培训班有哪些湖北seo关键词排名优化软件
  • 广告设计制作方案seo服务商技术好的公司
  • 二 网站建设的重要性搜索引擎优化seo课程总结
  • 企业宣传片视频模板seo推广软件代理
  • 关于企业网站建设的提案百度认证证书
  • 湖南株洲网站建设seo顾问服务咨询
  • 做服装网站宣传太原seo网站优化
  • 做网站需要规划好什么高端网站建设南宁
  • 网站建设公司领导致辞济南网站推广
  • 做免费采集电影网站犯法吗网站友情链接连接
  • 中铁建设投资集团有限公司网站口碑营销的优势有哪些
  • 网站改版后多久才收录百度搜索引擎关键词优化
  • 郑州做网站外包的公司昆明网站开发推广公司
  • 网站建设吉金手指排名14百度站长资源平台
  • 手机网站和微信网站的区别网站推广和seo
  • 专业网站制作团队免费收录平台
  • 北京企业网站建设多少钱河南网站网络营销推广
  • 计算机毕业设计java疫情开放下的新冠信息共享平台 基于Java的社区疫情防控人员流动管理系统 疫情防控期间社区人员动态管理系统
  • 机试备考笔记 7/31
  • 视觉语言模型的空间推理缺陷——AI 在医学扫描中难以区分左右
  • 合约收款方式,转账与问题安全
  • VC6800智能相机:赋能智能制造,开启AI视觉新纪元
  • 奔图P2500NW打印机手机无线连接方法