算法创作|打家劫舍

问题描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。除了“根”之外,每栋房子有且只有一个“父”房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。解决方案通过设置a为一个二维数组, 为root的[偷值, 不偷值],返回两个值的最大值, 此值为小偷最终获得的总值,再设置参数为root节点, helper方法输出一个二维数组:root节点的[偷值, 不偷值]若root为空, 输出 [0, 0],设置一个left和一个right二维数组,分别令其左右侧子节点为[偷值,不偷值],最后分别计算出root的偷值和不偷值,然后输出可获得的最大金额。class Solution:def rob(self, root: TreeNode) -> int:a = self.helper(root)return max(a[0], a[1])def helper(self, root):if not root:return [0, 0]left = self.helper(root.left)right = self.helper(root.right)robValue = left[1] + right[1] + root.valskipValue = max(left[0], left[1]) + max(right[0], right[1])return [robValue, skipValue]结语本题解题关键在于每个节点都设置:[偷, 不偷],每一个节点的偷值都是:左侧子节点的不偷值 + 右侧子节点的不偷值 + 该节点的值,每一个节点的不偷值都是:左侧子节点的最大值 + 右侧子节点的最大值。还需学习使用 helper方法输出一个二维数组。主编:欧洋作者:沈志坚、陈东、涂瀚鑫

(0)

相关推荐

  • leetcode算法总结 —— DFS深度优先搜索

    DFS 模板 dfs(TreeNode* root, int path) { //父节点要传给子节点值,则放到递归的形参中.`void dfs(TreeNode* root, int path)` i ...

  • 「C语言程序设计」C语言获取矩阵的最大值及其下标

    本实例要求使用二维数组将一个 3×4 的矩阵中所有元素的最大值及其下标获取,通过该程序,掌握二维数组的引用知识. 算法思想 针对本实例,有两个步骤需要编写程序完成: ✿ 第一个步骤是求矩阵元素的最大值 ...

  • 动态规划答疑篇

    ----------- 这篇文章就给你讲明白两个问题: 1.到底什么才叫「最优子结构」,和动态规划什么关系. 2.为什么动态规划遍历 dp 数组的方式五花八门,有的正着遍历,有的倒着遍历,有的斜着遍历 ...

  • 算法创作|神奇语言问题解决方法

    问题描述一位同学正在学习一门神奇的语言,其中的单词都是由小写英文字母组成,有些单词很长,而这位同学一直记不住,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现的最多来分辨单词,现在请帮助这位同学 ...

  • 算法创作|规则数列计算解决方法

    问题描述如下图所示,小明用从 1 开始的正整数"蛇形"填充无限大的矩阵.1 2 6 7 15 -3 5 8 14 -4 9 13 -10 12 -11 --(1)容易看出矩阵第二行 ...

  • 算法创作|阶梯电价问题解决方法

    问题描述为了提倡居民节约用电,某省电力公司执行"阶梯电价",安装一户一表的居民用户电价分为两个"阶梯":月用电量50千瓦时(含50千瓦时)以内的,电价为0.53 ...

  • 算法创作 | 0到n-1中缺失的数字问题解决方法

    问题描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字.示例1:输入:[0,1,3 ...

  • 算法创作|找出游戏的获胜者问题解决方法

    问题描述共有 n 名小伙伴一起做游戏.小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号.确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i ...

  • 算法创作 | 二叉树遍历问题解决方法

    问题描述二叉树的先序遍历.中序遍历.后序遍历怎么求?解决方案给你一个二叉树(如图)那么怎么找出它的先序遍历.中序遍历.后序遍历呢?我们先看一个简单二叉树来了解它的概念. 所谓前序,中序,后序就是指根所 ...

  • 算法创作|烂头背枪双人情况游戏随机模拟

    问题描述对于烂头背枪这个游戏,相信00后的同学并不陌生,这是幼时的回忆,这个游戏本身,有烂头,枪,虎,人,鸡,蜂总共六种角色,每种四个.对应规则为烂头背枪,枪打虎,虎吃人,人养鸡,鸡啄蜂,蜂叮烂头,前 ...

  • 算法创作|“画雪人”问题解决方法

    问题描述示例:运用Turtle画出一个戴帽子的雪人在你门前,我堆起一个雪人,代表笨拙的我,把你久等...解决方案掌握turtle库,you can do you want.代码清单 1 DFS求解1到 ...

  • 算法创作 | 将数字变成 0 的操作次数

    问题描述给你一个非负整数 num ,请你返回将它变成 0 所需要的步数.如果当前数字是偶数,你需要把它除以 2 :否则,减去 1 .为了方便理解题意,下面给出两个示例:示例 1:输入:num = 14 ...