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

什么推广方法最有效seo外链专员

什么推广方法最有效,seo外链专员,防恶意点击软件,网站定制开发是什么198.打家劫舍 思路: 1.确定dp数组(dp table)以及下标的含义:dp[i]:前 i 间房屋所能偷窃到的最高金额。 2.确定递推公式:dp[i] max(dp[i - 2] nums[i-1], dp[i - 1]) i间房屋的最后一个房子是nums[i−…

198.打家劫舍

思路:

1.确定dp数组(dp table)以及下标的含义:dp[i]:前 i 间房屋所能偷窃到的最高金额。

2.确定递推公式:dp[i] = max(dp[i - 2] + nums[i-1], dp[i - 1])

i间房屋的最后一个房子是nums[i−1]。

如果房屋数大于等于 2 间,则偷窃第 i−1 间房屋的时候,就有两种状态:

  1. 偷窃第 i−1 间房屋,那么第 i-2 间房屋就不能偷窃了,偷窃的最高金额为:前 i−2 间房屋的最高总金额 + 第 i−1 间房屋的金额,即 dp[i]=dp[i−2]+nums[i-1];

  2. 不偷窃第 i−1 间房屋,那么第 i−2 间房屋可以偷窃,偷窃的最高金额为:前 i−1 间房屋的最高总金额,即 dp[i]=dp[i−1]。

  3. 初始条件:

    • 前 0 间房屋所能偷窃到的最高金额为 0,即 dp[0]=0。

    • 前 1 间房屋所能偷窃到的最高金额为 nums[0],即:dp[1]=nums[0]。

  4. 确定遍历顺序:dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,那么一定是从前到后遍历

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

213.打家劫舍II

思路:

这道题可以看做是「198. 打家劫舍」的升级版。

如果房屋数大于等于 3 间,偷窃了第 1 间房屋,则不能偷窃最后一间房屋。同样偷窃了最后一间房屋则不能偷窃第 1 间房屋。

假设总共房屋数量为size,这种情况可以转换为分别求解 [0,size−2] 和 [1,size−1] 范围下首尾不相连的房屋所能偷窃的最高金额,然后再取这两种情况下的最大值。而求解 [0,size−2] 和 [1,size−1] 范围下首尾不相连的房屋所能偷窃的最高金额问题就跟「198. 打家劫舍」所求问题一致了。

class Solution:def helper(self, nums):size = len(nums)if size == 0:return 0dp = [0 for _ in range(size + 1)]dp[0] = 0dp[1] = nums[0]for i in range(2, size + 1):dp[i] = max(dp[i - 2] + nums[i - 1], dp[i - 1])return dp[size]def rob(self, nums: List[int]) -> int:size = len(nums)if size == 1:return nums[0]ans1 = self.helper(nums[:size - 1])ans2 = self.helper(nums[1:])return max(ans1, ans2)

337.打家劫舍III

思路:

树形动态规划问题。

对于当前节点 cur,不能选择子节点,也不能选择父节点。所以对于一棵子树来说,有两种情况:

  • 选择了根节点
  • 没有选择根节点

1.选择根节点

如果选择了根节点,则不能再选择左右儿子节点,这种情况下的最大值为:当前节点 + 左子树不选择根节点 + 右子树不选择根节点。

不选择根节点

2.如果不选择根节点,则可以选择左右儿子节点,共四种可能:

  • 左子树选择根节点 + 右子树选择根节点
  • 左子树选择根节点 + 右子树不选根节点
  • 左子树不选根节点 + 右子树选择根节点
  • 左子树不选根节点 + 右子树不选根节点

选择其中最大值。

# 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:# dp数组(dp table)以及下标的含义:# 1. 下标为 0 记录 **不偷该节点** 所得到的的最大金钱# 2. 下标为 1 记录 **偷该节点** 所得到的的最大金钱dp = self.traversal(root)return max(dp)# 要用后序遍历, 因为要通过递归函数的返回值来做下一步计算def traversal(self, node):# 递归终止条件,就是遇到了空节点,那肯定是不偷的if not node:return (0, 0)left = self.traversal(node.left)right = self.traversal(node.right)# 不偷当前节点, 偷子节点val_0 = max(left[0], left[1]) + max(right[0], right[1])# 偷当前节点, 不偷子节点val_1 = node.val + left[0] + right[0]return (val_0, val_1)
http://www.yayakq.cn/news/546581/

相关文章:

  • seo网站排名的软件自己做的网站如何放到微信
  • 英文网站标题字体游戏制作公司
  • 烟台市住房和城乡建设局网站网站头部导航样式
  • 网站建设协网站是干嘛用的
  • 简单学校网站模板网站备案不能访问
  • 主题资源网站建设反思微商软件代理
  • 做外贸站推广简述网站规划的一般步骤
  • 如何分析一个网站wordpress英文变成中文
  • 美容营销型网站网站建设哪家比较好
  • 陕西网站建设开发什么网站可以做章
  • 化工网站建站模板下载服务器用来做网站和数据库
  • 长春做网站外包wordpress写文章分段
  • 做外贸需要哪些网站wordpress景点展示插件
  • 网站备案核验单怎么填预装wordpress主机
  • 网站一年多少钱?云南响应式网站建设
  • 兴国做网站工作室装修网站源码
  • 黄金网站app在线观看下载10网站的ftp地址是什么
  • 滨州网站建设铭盛信息阿里云网站建设详细教程
  • 做网站 钱如何设计自己的网站
  • 国外网站设计风格todoist wordpress
  • 下列关于网站开发中网页发布厦门正规网站建设多少
  • 建wiki网站自己做的网站可以卖
  • 响应式网站模版建站电脑宽带网站
  • 网站设建设网站建设基本费用
  • 网站横幅怎么更换合肥市中小企业局网站
  • 富连网网站开发店铺首页设计步骤
  • 河北提供网站制作公司报价上海公司买房最新政策2021
  • 关于成立网站建设项目小组的通知建设公司logo
  • 开发公司把已经出售的房子一房二卖卖给股东个人百度seo公司电话
  • 网站开发数据接口如何利用建瓯市建设局网站