代码随想录算法训练营第四十七天|198. 打家劫舍、213. 打家劫舍II、337. 打家劫舍III

LeetCode 198. 打家劫舍
题目链接:198. 打家劫舍 - 力扣(LeetCode)

第一次打家劫舍,来个简单一些的,无非就是偷了当前这家偷不了下一家,因此dp[n]代表,偷前n家的时候所能偷到的最高金额,递推公式是dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])

每道题都要考虑dp五步:

1)确定dp数组下标与值的关系:偷前n家的时候所能偷到的最高金额

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

3)确定初始值:dp[0]为0,dp[1]为nums[0]

4)确定遍历的数:边界为2,到n

5)带入验证一下

代码:

#python  打家劫舍I  一维DP
class Solution:
    def rob(self, nums: List[int]) -> int:
        n = len(nums)
        dp = [0 for _ in range(n)]
        dp[0] = nums[0]
        for i in range(1, n):
            if i == 1:
                dp[i] = max(nums[i - 1], nums[i])
            else:
                dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
        return dp[-1]

LeetCode 213. 打家劫舍II
题目链接:213. 打家劫舍 II - 力扣(LeetCode)

第二次打家劫舍,在上次的基础上,头尾相连了,因此偷了最后一家就没法投第一家了,因此我们分类讨论,分别讨论[0,n - 1]与[1, n]两个区间的最大情况;同样的,dp[n]代表,偷前n家的时候所能偷到的最高金额,递推公式是dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])

每道题都要考虑dp五步:

1)确定dp数组下标与值的关系:偷前n家的时候所能偷到的最高金额

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

3)确定初始值:dp[0]为0,dp[1]为nums[0]

4)确定遍历的数:边界为2,到n

5)带入验证一下

代码:

#python  打家劫舍II
from typing import List

class Solution:
    def rob(self, nums: List[int]) -> int:
        n = len(nums)
        if n == 0:  //分别总体讨论特殊情况
            return 0
        if n == 1:
            return nums[0]
        if n == 2:
            return max(nums[0], nums[1])
        
        def rob_helper(nums):     //定义一个函数实现打家劫舍I的功能
            n = len(nums)
            dp = [0 for _ in range(n)]
            dp[0] = nums[0]
            dp[1] = max(nums[0], nums[1])
            for i in range(2, n):
                dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
            return dp[-1]
        
        return max(rob_helper(nums[1:]), rob_helper(nums[:-1]))  //返回俩区间的最大值

LeetCode 337. 打家劫舍III
题目链接:337. 打家劫舍 III - 力扣(LeetCode)

第三次打家劫舍,这次是真牛逼了,小偷懂能发现二叉树了,程序员下岗再就业了属于是0.0

按照来想,无非就是选与不选当前节点,同时使用递归来实现DP.

每道题都要考虑dp五步:

1)确定dp数组下标与值的关系:偷前n家的时候所能偷到的最高金额

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

3)确定初始值:dp[0]为0,dp[1]为nums[0]

4)确定遍历的数:边界为2,到n

5)带入验证一下

代码:

#python  //打家劫舍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:
        dp = self.traveral(root)
        return max(dp)
    
    def traveral(self, node):
        if not node:
            return 0, 0
        
        left = self.traveral(node.left)  //递归左子树
        right = self.traveral(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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/188320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次RocketMQ线上broker内存持续升高问题排查

RocketMQ 版本 5.1.0 jdk版本 1.8 JVM启动参数 -Xms46g -Xmx46g -XX:MetaspaceSize1259m -XX:MaxMetaspaceSize2517m -XX:UseG1GC -XX:G1HeapRegionSize16m -XX:G1ReservePercent25 -XX:InitiatingHeapOccupancyPercent30 -XX:SoftRefLRUPolicyMSPerMB0 -verbose:gc -Xlog…

【Docker】Docker与Kubernetes:区别与优势对比

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。   kubernetes,简称K8s&a…

Nacos身份绕过漏洞复现(QVD-2023-6271)

Nacos身份绕过漏洞复现(QVD-2023-6271) 环境配置 该漏洞主要用了win10_JAVA的环境,参考网上已有的复现文章,使用jdk-11.0.2_windows-x64_bin.exe 由于2.2.0之后的nacos已将本漏洞修复,所以本次复现使用2.2.0的包 下…

cephadm部署ceph quincy版本

环境说明 IP主机名角色 存储设备 192.168.2.100 master100 mon,mgr,osd,mds,rgw 大于5G的空设备192.168.2.101node101mon,mgr,osd,mds,rgw大于5G的空设备192.168.2.102node102mon,mgr,osd,mds,rgw大于5G的空设备 关闭防火墙 关闭并且禁用selinux 配置主机名/etc/hosts …

深度学习之图像分类(十四)CAT: Cross Attention in Vision Transformer详解

IPSA和CPSA的处理流程、维度变换细节 FLOPs的计算方法、以及flops和划分的patch数目以及patch的维度计算关系 IPSA如何进行local attention、CPSA如何进行globe attention CAT的代码详细注释---需要学习完Transformer TNT、swin transformer、crossViT CAT: Cross Atten…

2023年【道路运输企业安全生产管理人员】最新解析及道路运输企业安全生产管理人员复审考试

题库来源:安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员最新解析是安全生产模拟考试一点通总题库中生成的一套道路运输企业安全生产管理人员复审考试,安全生产模拟考试一点通上道路运输企业安全生产管理人员作业手机同步练习。2023…

【Web】攻防世界 难度3 刷题记录(1)

目录 ①lottery ②ics-05 ③mfw ④simple_js ⑤fakebook 感觉自己对一些综合题的熟练度不太够,专项训练一下 ①lottery 抽奖赚钱,钱够9990000可买flag 随便输一串数字抓包,然后查看到一个post请求,api.php,题目里面有附件…

armbian折腾之docker搭建chatgptweb指导(无需魔法)

文章目录 前言面板/docker的安装获取中转Key创建docker容器chatgpt-next-web部署[推荐]chatgpt-Web部署 推荐学习openai-hk官方的部署指导 前言 好久都没有折腾armbian,导致吃了很长时间的灰,今天偶然看到B站UP主JeeJK007的搭建视频,便想着能…

电脑技巧:电脑常见蓝屏、上不了网等故障及解决办法

目录 一、电脑蓝屏 常见原因1: 病毒木马 常见原因2: 安装了不兼容的软件 二、电脑不能上网 常见原因1: 新装系统无驱动 常见原因2: DNS服务器异常 常见原因3: 硬件问题 三、电脑没声音 常见原因1: 未安装驱动 常见原因2: 硬件故障 四、电脑屏幕不显示 常见原因1: 显…

【Mybatis】基础增删改查

一.创建SpringBoot项目 创建新项目需要添加的依赖 当然如果是以前的项目也可以直接在pom.xml文件中添加依赖: MySQL Driver依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</…

JVM虚拟机:G1垃圾回收器的日志分析

本文重点 本文我们将学习G1垃圾回收器的日志 使用 执行命令 java -Xms20M -Xmx20M -XX:PrintGCDetails -XX:UseG1GC 类名 分析 前面我们学习了G1垃圾回收器&#xff0c;它的回收有三种可能&#xff1a; YGC FGC MixedGC GC pause表示STW,Evacuation表示复制对象&#xff0c;…

卸载11.3的cuda,安装11.8的cuda及cudnn

linux查看cudnn版本_linux查看cudnn版本命令_在学习的王哈哈的博客-CSDN博客文章浏览阅读2.9k次&#xff0c;点赞6次&#xff0c;收藏6次。英伟达官方文档查看cuda版本cat /usr/local/cuda/version.txt或者nvcc --version 或者 nvcc -V查看cudnn版本网上都是这个但是不行cat /u…

解决几乎任何机器学习问题 -- 学习笔记(组织机器学习项目)

书籍名&#xff1a;Approaching (Almost) Any Machine Learning Problem-解决几乎任何机器学习问题 此专栏记录学习过程&#xff0c;内容包含对这本书的翻译和理解过程 我们首先来看看文件的结构。对于你正在做的任何项目,都要创建一个新文件夹。在本例中,我 将项目命名为 “p…

JAVA之异常详解

1. 异常的概念与体系结构 1.1 异常的概念 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常 1. 算术异常 public class Test {public static void main(String[] args) {System.out.println(10/0);} } 因为 0 不能当被除数&#xff0c;所以报出了异常&#…

如何避免死锁

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

【C++】IO流

文章目录 一、C语言的输入与输出二、流是什么&#xff1f;三、CIO流1. C标准IO流2. C文件IO流 四、stringstream简单介绍 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是 scanf () 与 printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值…

xadmin后台在每一行记录增加一个复制链接按钮

xadmin后台在每一行记录增加一个复制链接按钮 1、效果 点击复制后,自动把url链接复制到粘贴板,按Ctrl+v即可显示复制内容。 2、实现代码 adminx.py # 用户管理 class UserWhiteListAdmin(object):search_fields = [name, mobile] # 检索字段list_display

Linux 基础-常用的命令和搭建 Java 部署环境

文章目录 目录相关查看目录中的内容查看目录当前的完整路径切换目录 文件相关创建文件查看文件内容写文件vim 基础 创建删除创建目录 移动和复制移动(剪切粘贴)复制(复制粘贴) 搭建 Java 部署环境1. 安装 jdk2. 安装 tomcat1). 我们在自己电脑上下好 tomcat2). 从官网下载的 .z…

spring本地事务与单/多线程

请直接看原文 原文链接:多线程与数据库事务以及数据库连接之间的关系 - 知乎 (zhihu.com) -------------------------------------------------------------------------------------------------------------------------------- 今天我们来梳理一下&#xff0c; 多线程、数…

HCIP-九、路由控制

九、路由控制 实验拓扑实验需求及解法1.企业生产网运行 OSPF&#xff0c;完成以下需求&#xff1a;2.数据中心运行 ISIS3.路由引入4.路由策略5.策略路由6.ISP 过滤私网路由 实验拓扑 实验需求及解法 1.企业生产网运行 OSPF&#xff0c;完成以下需求&#xff1a; 1.1 OSPF 进程…