代码随想录训练营Day48|● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

news/2024/11/7 21:44:48/

目录

学习目标

学习内容

 198.打家劫舍

  213.打家劫舍II  

 337.打家劫舍III


学习目标

  •  198.打家劫舍 
  •  213.打家劫舍II  
  •  337.打家劫舍III

学习内容

 198.打家劫舍

198. 打家劫舍 - 力扣(LeetCode)icon-default.png?t=N4HBhttps://leetcode.cn/problems/house-robber/

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

  213.打家劫舍II  

213. 打家劫舍 II - 力扣(LeetCode)icon-default.png?t=N4HBhttps://leetcode.cn/problems/house-robber-ii/

class Solution:def rob(self, nums: List[int]) -> int:n = len(nums)if n==1:return nums[0]@cachedef dfs(i,first):if i<0:return 0if i==0:if first:return nums[i]return 0return max(dfs(i-1,first),dfs(i-2,first)+nums[i])return max(dfs(n-1,False),dfs(n-2,True))
class Solution:def rob(self, nums: List[int]) -> int:n = len(nums)if n==1:return nums[0]dp = [0]*(n+1)dp[1] = nums[0] # 选首家不选尾家for i in range(2,n):dp[i] = max(dp[i-1],dp[i-2]+nums[i-1])a = dp[n-1]dp = [0]*(n+1)for i in range(2,n+1):dp[i] = max(dp[i-1],dp[i-2]+nums[i-1])b = dp[n]return max(a,b)

 337.打家劫舍III

337. 打家劫舍 III - 力扣(LeetCode)icon-default.png?t=N4HBhttps://leetcode.cn/problems/house-robber-iii/

# 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:@cachedef dfs(root,robbed):if not root:return 0if robbed:return dfs(root.left,False)+dfs(root.right,False)+root.valreturn max(dfs(root.left,False),dfs(root.left,True))+max(dfs(root.right,False),dfs(root.right,True))return max(dfs(root,False),dfs(root,True))
# 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:@cachedef dfs(root):if not root:return [0,0] # 偷,不偷left = dfs(root.left)right = dfs(root.right)steal = max(left[0],left[1])+max(right[0],right[1])return [left[1]+right[1]+root.val,steal]res = dfs(root)return max(res[0],res[1])


http://www.ppmy.cn/news/85255.html

相关文章

2023门店管理系统app真实测评,第一款最实用!

我们在门店管理过程中&#xff0c;经常会遇到&#xff1a;库存管理不及时和不准确&#xff0c;订单处理不及时或出错&#xff0c;门店复购率低、客户流失严重等问题。 选用一款性价比高、实用性强、简单易操作的猛管理app&#xff0c;可以辅助我们更高效地管理门店&#xff0c;…

详解FreeRTOS:嵌入式多任务系统的任务等待和唤醒机制(理论篇—8)

当任务在试图访问IPC对象时&#xff0c;经常会因为运行条件不足而失败&#xff0c;被迫返回或者阻塞在该IPC对象的任务阻塞队列。而当有任务释放资源从而使得资源条件可以满足时&#xff0c;操作系统将会唤醒IPC对象上的阻塞任务&#xff0c;使得被唤醒任务继续运行。不同的访问…

又一神器开源!无需服务器支持!打通手机,浏览器的Web LLM!

大家好&#xff0c;我是千与千寻&#xff0c;大家可以叫我“千寻哥”&#xff0c;之前和大家分享了两篇关于ChatGPT的技术文章&#xff0c;ChatGPT毫无疑问是现在最大的风口&#xff0c;各个行业都在集成ChatGPT的API接口以及各类的应用插件&#xff0c;这么多人的应用&#xf…

第一章.The Learning Problem

第一章.The Learning Problem 1.1 The Learning Problem 1.机器学习的概念&#xff1a; 机器学习就是机器从数据中总结经验。从数据中找出某种规律或者模型&#xff0c;并用他来解决某种实际问题。 2.机器学习的应用场景 1).事物本身存在某种潜在规律 2).某些问题难以使用普…

Elastic Stack

一、简介 ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;官网https://www.elastic.co/cn。包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和收集的场景&#…

Android 之MPAndroidChart图表案例

一 简介 1.1 图表用于直观的分析数据的分布情况&#xff0c;用于对比数据的大小和趋势。 1.2 图表的类型也非常多&#xff0c;常见的有折线&#xff0c;柱状&#xff0c;饼状&#xff0c;其它的有面积&#xff0c;散点&#xff0c;股价&#xff0c;雷达&#xff0c;仪表盘&am…

6. 实现简单的线程池

本文以营业厅为例子&#xff0c;实现简单的线程池 一、线程池介绍 现在的企业客户端数以百万&#xff0c;如果某一时刻同时向服务器发消息&#xff0c;那么服务器要处理这些消息是同时开百万个线程吗&#xff1f;&#xff1f;当然不行&#xff01;&#xff01; 根据posix标准&…

AWS VPC 配置指南:快速创建和设置你的虚拟私有云

文章目录 一、前言二、创建 VPC2.1 进入 AWS VPC 服务2.2 创建 VPC2.3 选择所要创建的 VPC 资源2.4 输入 VPC 名称2.5 设置 IPv4 CIDR block&#xff08;IPv4 CIDR 块&#xff09;2.6 选择可用区2.7 选择公有子网的数量2.8 设置 NAT 网关和 VPC 终端节点2.9 完成创建 VPC2.10 查…