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

有限公司网站建设 互成网络地址 四川太原专门做网站

有限公司网站建设 互成网络地址 四川,太原专门做网站,建站网页建设,wordpress专题插件198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…

198.打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

解题思路:

确定dp数组含义:dp[i]遍历到房屋index为i时所能打劫到的最多钱

确认递推公式:dp[i]取决于前一个房屋和前两个房屋是否有被偷,如果前一个被偷,则不能偷第i个,如果第i-2个被偷,可选择是否偷第i个。dp[i] = max(dp[i-2]+nums[i], dp[i-1])

初始化:dp[0] = nums[0], dp[1] = max(nums[0], nums[1])

遍历顺序:从小到大遍历

打印dp数组

class Solution:def rob(self, nums: List[int]) -> int:if len(nums)<=1:return nums[0]dp = [0]*(len(nums))dp[0] = nums[0]dp[1] = max(nums[0], nums[1])for i in range(2, len(nums)):dp[i] = max(dp[i-2]+nums[i], dp[i-1])return dp[len(nums)-1]

 213.打家劫舍II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

解题思路:

本题与上一题区别在于环形数组和直线数组,环形数组首尾不能同时取值,因此分为三种情况:

  1. 不考虑首尾的数组
  2. 不考虑尾部的数组
  3. 不考虑首部的数组

可以发现2, 3包含情况一,因此只需要在2,3中取最大值即可。

dp五步骤:

确定dp数组含义:dp[i]遍历到房屋index为i时所能打劫到的最多钱

确认递推公式:dp[i]取决于前一个房屋和前两个房屋是否有被偷,如果前一个被偷,则不能偷第i个,如果第i-2个被偷,可选择是否偷第i个。dp[i] = max(dp[i-2]+nums[i], dp[i-1])

初始化:dp[0] = nums[0], dp[1] = max(nums[0], nums[1])

遍历顺序:从小到大遍历

打印dp数组

class Solution:def rob(self, nums: List[int]) -> int:if len(nums)<=1:return nums[0]def helper(subnums):if len(subnums)<=1:return subnums[0]dp = [0]*len(subnums)dp[0] = subnums[0]dp[1] = max(subnums[0], subnums[1])for i in range(2, len(subnums)):dp[i] = max(dp[i-2]+subnums[i], dp[i-1])print(dp)return dp[len(subnums)-1]return max(helper(nums[:-1]), helper(nums[1:]))

 337.打家劫舍III

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

示例 1:

输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7

解题思路:

本体使用递归三部曲结合dp五步骤,设置dp[0],dp[1]表示打劫当前节点和不打劫当前节点的最大值,每个node有一组对应的dp[0], dp[1]。使用后序遍历,当前节点dp值需要结合其左右节点dp进行分析。 递归三步骤:确定递归参数,确定停止条件,递归逻辑。输入参数统一为当前节点即表示为root, 当root == null停止并返回0,再遍历左右子树,中间值取最大dp值。

重点理解

val1 = root.val + leftdp[0] + rightdp[0]#行窃root

val2 = max(leftdp[0],leftdp[1])+max(rightdp[0], rightdp[1])#不行窃root,选取左右子树行窃或不行窃时的最大值,两边取max。

代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def rob(self, root: Optional[TreeNode]) -> int:def helper(root):if not root:return [0,0]leftdp = helper(root.left)rightdp = helper(root.right)val1 = root.val + leftdp[0] + rightdp[0]#行窃rootval2 = max(leftdp[0],leftdp[1])+max(rightdp[0], rightdp[1])#不行窃rootreturn [val2, val1]return max(helper(root))

http://www.yayakq.cn/news/58527/

相关文章:

  • 国土资源局网站建设制度学传媒以后能干什么
  • 重庆市建设网站ui培训时间
  • 网站下面版权代码上海网站建设开发哪家
  • 湖北黄石网站建设做网站的服务器有哪些
  • 做网站推广需要什么专业建设部网站设计资质查询
  • html 社区网站 模板wordpress家居主题
  • 网站推广东莞嘉兴网站建设的地方
  • 济南网站建设全包网络营销网站建设公司
  • 龙湖网站建设wordpress出错500
  • 三亚北京网站建设视频网站开发策划书
  • 型云网站建设wordpress取消菜单
  • 中国大连网站仿照别的网站做
  • 网站ftp空间网上购物系统流程图
  • 门户网站是龙岩融胤网络科技有限公司
  • 手机网站申请学wordpress难不难
  • 做爰网站下载地址ppt网站哪家比较好
  • 图片上传网站制作南昌天和建设有限公司网站
  • 广州做网站的公asp.net网站iis与目录权限设置
  • 网站下拉菜单代码怎样精通wordpress
  • 房地产市场信息系统网站网页版淘宝网登录入口
  • 人人商城程序做的网站打不开手机网站轮播图
  • 城市建设最好的网站三亚8名男女深夜被抓
  • 青岛开发区网站提供网站建设公司哪家好
  • 上海医院网站建设河北省建设厅正规网站
  • 苏州网站建设开发哪家好三亚招聘网
  • 公司网站上传图片仿京东电商的网站开发
  • 广州市地铁站地图个人网页制作成品
  • 网站备案 法人代表浙江宝业建设集团网站
  • 建设网站需要做的工作写wordpress导航栏
  • 网站名称与主办单位微网站 淘宝客