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

洛阳做网站公司地址云凡济南网站建设开发

洛阳做网站公司地址,云凡济南网站建设开发,aspx网站服务器失去响应,延吉网站开发公司有哪些leetcode 198 打家劫舍 leetcode 213 打家劫舍 II leetcode 337. 打家劫舍 III 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#…

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

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

示例 1:

输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
示例 2:

输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。
示例 3:

输入:nums = [1,2,3]
输出:3

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 1000

思路,对于打家劫舍 I, 可以转化成动态规划问题求解,对于打家劫舍 II ,首尾认为是相邻,可以转换成调用 打家劫舍 I 中的问题两次,

class Solution:def maxMoney(self, nums):## dp[i][0] 表示到第 i 位置为止,不偷 i 的最大金额,dp[i][1] 表示偷 i 的最大金额dp = [[0, 0] for i in range(len(nums))]dp[0][1] = nums[0]for i in range(1, len(nums)):dp[i][0] = max(dp[i-1][0], dp[i-1][1])dp[i][1] = dp[i-1][0]+nums[i]return max(dp[-1][0], dp[-1][1])def rob(self, nums: List[int]) -> int:if len(nums) == 1:return nums[0]return max(self.maxMoney(nums[:-1]), self.maxMoney(nums[1:]))

打家劫舍 III, 定义字段 a 和 b,分表表示 盗取(不盗取) 以 当前 root 节点为根节点的最大金额,这样递归就能求解出来。

# 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 __init__(self):self.a = dict()  ## 存放以某个节点为根节点能盗取的最高金额(偷根节点)self.b = dict()  ## 存放以某个节点为根节点能盗取的最高金额(不偷根节点)## f 为 1 时, 表示偷 root 节点, 为 0 表示不偷def dfs(self, root, f):if root == None:return 0res = 0left_0 = self.b[root.left] if root.left in self.b else self.dfs(root.left, 0)right_0 = self.b[root.right] if root.right in self.b else self.dfs(root.right, 0)left_1 = self.a[root.left] if root.left in self.a else self.dfs(root.left, 1)right_1 = self.a[root.right] if root.right in self.a else self.dfs(root.right, 1)res_0 = max(left_0, left_1) + max(right_0, right_1)  ## 不偷  root 节点res_1 = root.val + left_0 + right_0    ## 偷 root 节点self.a[root] = res_1self.b[root] = res_0if f == 1:return res_1else:return res_0def rob(self, root: Optional[TreeNode]) -> int:return max(self.dfs(root, 0), self.dfs(root, 1))
http://www.yayakq.cn/news/220968/

相关文章:

  • 怎么在网站添加关键词qq空间网址是什么
  • 做餐饮公司网站网站 ip修改备案流程
  • 网站开发与设计实训报告总结yoast wordpress seo
  • 网站防护找谁做福州建网站哪家公司好
  • 免费学做衣服的网站徐州做企业网站
  • 最大的搜索网站排名做网站的可以信吗
  • 能通过淘宝网站做淘宝客吗招标网站排行榜
  • 什么网站可以免费做试卷网页制作与网站开发从入门到精通
  • 网站怎样建设做旅游网站的目标
  • 网站怎么绑定域名房产集团公司网站建设方案
  • 建设专业网站公司宿舍网络规划与设计
  • 网站公司设计 网站首页工程行业网站
  • s吗网站虚拟主机wordpress能做手机版
  • 常见网站页面布局类型许昌 网站建设
  • 网站开发包含什么wordpress异步加载数据
  • 那个网站做720度效果图徐州最好网站建设
  • 个人网站html模板下载关键词搜索广告
  • 优秀的设计网站有哪些内容网页鉴赏
  • 购物网站开发的背景网站平台有哪些
  • 网站建设与维护里面的个人简历个人网页制作成品田田田田田田田田
  • 在自己网站建立自己的外链专业黑帽seo
  • 网站空间地址深圳市工程建设造价网站
  • dedecms公司网站怎么做推广效果最好的平台
  • 现在最常用网站开发工具网站制作公司 顺的
  • 网站如何做留言板军事国际新闻最新消息
  • 网站建设的内容有哪些求职seo
  • 外贸网站排行榜前十名深圳网站制作工作室
  • 株洲网站建设优化哪个网站可以做笔译兼职
  • 榆林网站seo做外贸是否需要有自己的网站
  • 网站联系我们怎么做发布软文广告