当前位置: 首页 > 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)

相关文章:

  • 访问jlesage/firefox镜像创建的容器中文乱码问题
  • Mac 终端报错 zsh: command not found: brew 解决方案
  • JVM 三色标记算法
  • Linux的操作命令(2)
  • 计算机SCI期刊,IF=13.3+,期刊质量非常高,声誉佳
  • Linux系统学习——指令二
  • 无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?
  • 阿三再现强盗行为,vivo、OPPO或彻底失去印度市场
  • 【proteus仿真】基于51单片机的电压检测系统
  • 问题(05)elementui 输入框里面禁止浏览器自动填充用户名密码、弹出浏览器历史密码提示框
  • Novartis诺华制药社招综合能力性格动机问卷入职测评笔试题库答案及包过助攻
  • 设计模式学习(二)工厂模式——工厂方法模式
  • 一文看懂人工智能、机器学习、深度学习是什么、有什么区别!
  • 618必抢清单:内存升级国货更强,DDR5劲爆大白菜
  • 云和运维(SRE)的半生缘-深读实证02
  • Apache Spark Streaming 使用实例
  • Apache的基本使用
  • exif信息对照
  • fetch 从初识到应用
  • mongo索引构建
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • quasar-framework cnodejs社区
  • redis学习笔记(三):列表、集合、有序集合
  • ucore操作系统实验笔记 - 重新理解中断
  • 关于 Cirru Editor 存储格式
  • 机器学习中为什么要做归一化normalization
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 将 Measurements 和 Units 应用到物理学
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 手机端车牌号码键盘的vue组件
  • 我与Jetbrains的这些年
  • 学习HTTP相关知识笔记
  • 应用生命周期终极 DevOps 工具包
  • 用Visual Studio开发以太坊智能合约
  • postgresql行列转换函数
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​数据结构之初始二叉树(3)
  • !$boo在php中什么意思,php前戏
  • # Redis 入门到精通(九)-- 主从复制(1)
  • (20)docke容器
  • (SpringBoot)第二章:Spring创建和使用
  • (WSI分类)WSI分类文献小综述 2024
  • (安卓)跳转应用市场APP详情页的方式
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)Linux下编译安装log4cxx
  • (转)memcache、redis缓存
  • (转)shell调试方法
  • (转)一些感悟