代码随想录刷题记录 day42 打家劫舍 1 2 3

news2024/11/26 14:50:41

代码随想录刷题记录 day42 打家劫舍 1 2 3

参考:代码随想录

198. 打家劫舍

在这里插入图片描述

思想

1.dp[i]表示偷取[0,i]房间内获取的最高的金额

2.递推公式

  • 偷取第i号房间时的价值

    dp[i]=dp[i-2]+nums[i];

  • 不偷取第i号房间时的价值

    dp[i]=dp[i-1]

所以递推公式

dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i])

3.初始化

dp[0]=nums[0];

dp[1]=max(nums[0],nums[1]) ;

4.遍历顺序

从小到大

5.打印dp数组

nums=[1,2,3,1]

dp=[0,1,2,4,4]

代码

class Solution {
    public int rob(int[] nums) {
        //dp[i] 表示偷 [0,i]区间的房间能偷到的最高的金额
        //考虑以下两种情况,
        //1.偷第i间房 dp[i]=dp[i-2]+nums[i]
        //2.不偷第i间房 dp[i]=dp[i-1] 考虑i-1房
        if(nums.length==1) return nums[0];
        
        int [] dp=new int[nums.length];
        dp[0]=nums[0];
        dp[1]=Math.max(nums[0],nums[1]);
        if(nums.length==2) return dp[1];

        for(int i=2;i<nums.length;i++){
            dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1]);
            //System.out.println(dp[i]);
        }

        return dp[nums.length-1];
        

    }
}

213. 打家劫舍 II

在这里插入图片描述

思想

考虑

偷首不偷尾

偷尾不偷首

首尾都不偷

偷首不偷尾和偷尾不偷首包括了首尾都不偷的情况

  • 将偷首不偷尾所包含的数组区间传入上一题打家劫舍的逻辑得到res1
  • 将偷尾不偷首所包含的数组区间传入上一题打家劫舍的逻辑得到res2
  • 较大的就是所求的答案

代码

class Solution {
    public int rob(int[] nums) {
        //考虑首元素  考虑尾元素
        if(nums.length==0) return 0;
        if(nums.length==1) return nums[0];

        int res1=robRange(nums,0,nums.length-2);//闭区间
        int res2=robRange(nums,1,nums.length-1);
        return Math.max(res1,res2);
    }
    public int robRange(int[] nums ,int start,int end){
        if(end==start) return nums[start];//首元素=尾元素  直接返回
        int [] dp=new int[nums.length];
        dp[start]=nums[start];
        dp[start+1]=Math.max(nums[start],nums[start+1]);
        for(int i=start+2;i<=end;i++){
            dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1]);
        }

        return dp[end];
    }
}

337. 打家劫舍 III

在这里插入图片描述

思想

  1. dp[0]表示不偷取当前节点获得的价值,dp[1]表示偷取当前节点获得的价值

  2. 递推公式

    • 不偷取当前节点

      int val1=Math.max(left[0],left[1])+Math.max(right[0],right[1]);

    • 偷取当前节点

      int val2=node.val+left[0]+right[0];

  3. 终止条件和初始化

    int[] dp=new int[2];

    if(node.val==null) return dp;

  4. 遍历顺序

    后序遍历

    通过递归左节点,得到左节点偷与不偷的金钱。

    通过递归右节点,得到右节点偷与不偷的金钱。

代码

class Solution {
    public int rob(TreeNode root) {
        int[] res=robRecursion(root);
        return Math.max(res[0],res[1]);

    }
    public int[] robRecursion(TreeNode node){

        int[] dp=new int[2];
        if(node==null) return dp;
        //dp[0] 表示不偷当前节点 dp[1] 表示偷当前节点

        int[] left=robRecursion(node.left);
        int[] right=robRecursion(node.right);
        dp[0]=Math.max(left[0],left[1])+Math.max(right[0],right[1]);
        dp[1]=node.val+left[0]+right[0];

        return dp;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】一文简单了解操作系统在硬件中的作用,解析操作系统是做什么的?

目录前言一.操作系统的介绍二.计算机软件体系结构接口各层接口三.操作系统做什么1.不要让CPU打盹多道程序分时系统多任务系统2.设备驱动操作系统对软硬件进行合理的管理&#xff0c;以达到为上层用户提供良好的&#xff0c;稳定的&#xff0c;安全的运行环境的目的&#xff01;…

AppScan使用教程

一、安装 IBM AppScan 该产品是一个领先的 Web 应用安全测试工具&#xff0c;曾以 Watchfire AppScan 的名称享誉业界。Rational AppScan 可自动化 Web 应用的安全漏洞评估工作&#xff0c;能扫描和检测所有常见的 Web 应用安全漏洞&#xff0c;例如 SQL 注入&#xff08;SQL-i…

多时点DID实证流程笔记(Aggregate Effects from Public Works: Evidence from India)

文章、数据及stata代码来源&#xff1a; 链接:https://pan.baidu.com/s/1nBvlYGXkV7ednEx93ge1ZQ 提取码:vs5q本文进行的平行趋势检验、异质性检验均与大部分中文文献的处理方式不同&#xff0c;以及Bacon分解的方法对交叠did的潜在偏误进行诊断的做法也是比较新颖的。另外&a…

林业数字孪生打造实时树木“管家”

数字孪生是物联网、人工智能、虚拟现实、云计算等技术高度融合的综合性集成技术&#xff0c;主要目的是进行数字模型的智能分析、预测&#xff0c;为实体提供决策支持。林业数字孪生应用是智慧林业的具体实现手段&#xff0c;服务于智慧林草的业务需求&#xff0c;从而实现实体…

C语言#include的用法详解(文件包含命令)

#include叫做文件包含命令&#xff0c;用来引入对应的头文件&#xff08;.h文件&#xff09;。#include 也是C语言预处理命令的一种。 #include 的处理过程很简单&#xff0c;就是将头文件的内容插入到该命令所在的位置&#xff0c;从而把头文件和当前源文件连接成一个源文件&…

AI-多模态-2021:FILIP【一种基于交互的细粒度图文预训练模型】

前言 FILIP&#xff08;Fine-grained Interactive Language-Image Pretrain&#xff09;是一种基于交互的细粒度图文预训练模型&#xff0c;用于解决图文双塔匹配模型中的细粒度匹配问题。本文对该论文进行阅读笔记&#xff0c; 论文&#xff1a;https://arxiv.org/abs/2111.…

【C#基础教程】第二十章、事件

目录 事件 1.事件 2.扩展EventArgs类 事件 1.事件 事件的组成&#xff1a;事件由事件发布者和事件订阅者组成。事件内包含一个私有委托。 当事件发布时&#xff0c;事件发布者会发布消息、而事件订阅者会接受到事件已发生的通知&#xff0c;并作出相应的处理。 其中&#xf…

计算机研究生就业方向之考编

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

MyBatis的缓存机制

文章目录1 MyBatis的一级缓存1.1 演示1.2 使一级缓存失效的四种情况2 MyBatis的二级缓存2.1 演示2.2 使二级缓存失效的情况&#xff1a;2.3 二级缓存的相关配置&#xff08;了解即可&#xff09;3 MyBatis缓存查询的顺序1 MyBatis的一级缓存 一级缓存是SqlSession级别的&#…

【vue加载16秒优化到2秒】Vue3加载慢的性能优化,打包后页面静态资源chunk-vendors文件过大加载慢响应慢

【写在前面】基于自己之前做vue3项目的时候发现了一个致命的问题&#xff0c;项目部署好了&#xff0c;但是加载起来反应慢半天&#xff0c;控制台一看才发现&#xff0c;有个chunk-vendors的js文件加载了十几秒&#xff0c;这无非是页面体验差到爆炸。今天就针对打包后静态资源…

【密码学基础】混淆电路(Garbled Circuit)

1 概念 混淆电路是一种密码学协议&#xff0c;以实现安全多方计算&#xff08;MPC&#xff09;。场景是当多个通信方需要共同输入数据&#xff0c;然后通过同一个函数计算出一个结果&#xff0c;但是&#xff0c;各个通信方都不允许其他人知道自己的输入是什么。混淆电路就能很…

MySQL错误码大全

MySQL的所有错误码可以从MySQL官网查看。 1.MySQL地址 首页网址 2.文档地址 以此点击如下标志。 MySQL8.0文档地址 3.错误码地址 服务码官网地址 点进去之后&#xff0c;可以看到&#xff1a; 分为三大类&#xff1a; Server Error Message ReferenceClient Error Mes…

Java大型建筑建设综合工程项目管理系统源码带原生APP源码 工程管理系统源码 Java手机端工程项目管理系统源码带客户端操作手册

客户端下载&#xff1a; 1、安卓手机端 先下载“PP助手”应用商店&#xff0c;再在PP助手中搜索“star工程”下载安装。 2、苹果手机端 苹果手机APPstore中搜索“star工程”下载安装。 建设综合工程项目管理系统&#xff0c;让公司业务管理实现可记录&#xff0c;可追踪&#…

数字图像处理(入门篇)七 图像数据预处理之灰度变化

目录 一 常用操作 1 反转 2 对比度增强 3 对比度压缩 4 伽马矫正 二 实践 1 反转、对比度增强和对比度压缩 (1) 代码 (2) 结果图 2 伽马矫正 (1) 代码 (2) 结果图 (3) 结论 (4) np.power函数 图像灰度变换&#xff1a;将原始图像中的每一个点的灰度值&#xff0c…

尚医通 (三十三) -------- 阿里云OSS、用户认证与就诊人

目录一、阿里云 oss1. 开通 对象存储 OSS 服务2. 使用 SDK 文档3. 文件服务实现搭建 service-oss 模块测试SDK封装 service 接口封装 controller 接口二、用户认证1. 需求分析2. api 接口3. 前端4. 预约挂号页面调整三、就诊人管理1. 需求分析2. api 接口3. 前端四、平台用户管…

最新阿里云服务器和GPU服务器长期优惠活动价格表

阿里云服务器优惠活动是长期的&#xff0c;在12月优惠活动大促期间云服务器价格会有所调整&#xff0c;主机教程网现在给大家分享最新的阿里云服务器优惠活动价格表。现在阿里云双十一优惠活动刚刚结束&#xff0c;随之而来的就是双12优惠活动&#xff0c;关于阿里云服务器、对…

camunda入门教程及实现原理

1、camunda简介 1、介绍&#xff1a; Camunda是一种工作流引擎。 Camunda BPM 是一个轻量级、开源灵活的工作流框架&#xff0c;是由Java开发的一个纯Java库。它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎&#xff0c;因此它可以嵌入到任何Java应用程序或运行时…

Linux 添加环境变量的两种方法 exprot 临时法 vi /etc/profile永久法

编写一个shell脚本之后&#xff0c;怎么可在任意目录运行改脚本呢&#xff1f;为什么别人写的脚本可以直接运行&#xff0c;自己写的脚本就会出现 -bash: XXXXX.sh: command not found 这样的错误呢&#xff1f; 1、举例验证&#xff0c;先新建一个HelloWorld的shell脚本&…

Alibaba 工具型技术系列,实战技术针对于项目中常用的 Excel 操作指南

ExcelIgnoreUnannotated 默认不加 ExcelProperty 的注解的都会参与读写&#xff0c;加了不会参与 通用参数 ReadWorkbook,ReadSheet 都会有的参数&#xff0c;如果为空&#xff0c;默认使用上级。 converter 转换器&#xff0c;默认加载了很多转换器。也可以自定义。 rea…

emlog模板开发基础2022最新指南

emlog模板的开发基础指南,如果想要开发emlog的模板,你必须知道那些开发内容呢&#xff1f;下面将介绍分析emlog5下的模板基本结构以及基本变量、函数的作用。 首先我们用该知道emlog的模板是位于根目录content\templates\文件夹下,每个模板都是一个单独的文件夹,文件夹以模板名…