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

【代码随想录训练营】【Day 50】【动态规划-9】| Leetcode 198, 213, 337

【代码随想录训练营】【Day 50】【动态规划-9】【需二刷】| Leetcode 198, 213, 337

需强化知识点

  • 需二刷,打家劫舍系列

题目

198. 打家劫舍

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

  • 环形问题的拆解:拆解为多种情况,分别计算,取最大值
class Solution:def rob(self, nums: List[int]) -> int:if len(nums) == 1:return nums[0]if len(nums) == 2:return max(nums[0], nums[1])nums_v1 = nums[1:]nums_v2 = nums[:-1]result = max(self.robRange(nums_v1), self.robRange(nums_v2))return resultdef robRange(self, nums):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-1], dp[i-2]+nums[i])return dp[len(nums)-1]

337. 打家劫舍 III

  • 代码随想录思路:树形 dp
  • 理解 记忆递归:为什么会出现重复计算的部分
# 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:# if root is None:#     return 0# if root.left is None and root.right is None:#     return root.val# # 偷父节点# val1 = root.val# if root.left:#     val1 += self.rob(root.left.left) + self.rob(root.left.right)# if root.right:#     val1 += self.rob(root.right.left) + self.rob(root.right.right)# # 不偷父节点# val2 = self.rob(root.left) + self.rob(root.right)# return max(val1, val2)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.lryc.cn/news/369104.html

相关文章:

  • 源码讲解kafka 如何使用零拷贝技术(zero-copy)
  • Ubuntu20.04配置qwen0.5B记录
  • java自学阶段二:JavaWeb开发--day80(项目实战2之苍穹外卖)
  • HPUX系统Oracle RAC如何添加ASM磁盘
  • Jmeter 压力测测试的简单入门
  • N叉树的层序遍历-力扣
  • 解决阿里云的端口添加安全组仍然无法扫描到
  • 【因果推断python】26_双重稳健估计1
  • C语言 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】
  • Unity DOTS技术(十五) 物理系统
  • Java线程安全
  • Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作?回滚交易和抛出异常如何选择?
  • SpringCloud 网关配置websocket
  • 基于JavaScript 实现近邻算法以及优化方案
  • 移动端适配和响应式页面中的常用单位
  • 麒麟v10系统arm64架构openssh9.7p1的rpm包
  • 刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)
  • python对视频进行帧处理以及裁减部分区域
  • Python栈的编程题目
  • ROS云课三分钟外传之CoppeliaSim_Edu_V4_1_0_Ubuntu16_04
  • day28回溯算法part04| 93.复原IP地址 78.子集 90.子集II
  • SpringBoot项目启动时“jar中没有主清单属性”异常
  • vAttention:用于在没有Paged Attention的情况下Serving LLM
  • Python实现Stack
  • Helm在线部署Longhorn(1.6.0版本)分布式存储
  • 算法题目学习汇总
  • DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)
  • 吊车报警的工作原理和使用场景_鼎跃安全
  • Spring5
  • vue面试题二