LeetCode198.打家劫舍

 打家劫舍和背包问题一样是一道非常经典的动态规划问题,只要做过几道动态规划的题,这道题简直就非常容易做出来。我应该花了10来分钟左右就写出来了,动态规划问题最重要的就是建立状态转移方程,就是说如何从上一个状态转移到下一个状态的。直观的说就是dp[i]是怎么来的,是通过dp[i-1]来的还是通过dp[i-2]来的等等,如果知道初始状态和状态转移方程,那么每个状态都可以算出来,以下是我的代码:

class Solution {
    public int rob(int[] nums) {
        int n = nums.length;
        int[][] dp = new int[n][2];
        dp[0][0] = 0;
        dp[0][1] = nums[0];
        int max = Math.max(dp[0][0], dp[0][1]);
        for(int i=1;i<n;i++){
         dp[i][0] = max;
         dp[i][1] = dp[i-1][0]+nums[i];
         max = Math.max(dp[i][0], dp[i][1]);
        }
        return max;
    }
}

 数组大小是n,我建立一个int[n][2]的dp数组,其中dp[i][0]表示不偷第i家能获得的最大的价值,dp[i][1]表示偷第i家能获得的最大的价值。max表是dp[i][0]和dp[i][1]中的最大值,表示偷到第i家能获得的最大价值(因为是从第0家偷到第n-1家的)。

初始状态:dp[0][0]=0; 表示不偷第0家,dp[0][1]=nums[0];表示偷第0家。

状态转移方程:dp[i][0] = max;这个max是dp[i-1]的最大值,就是说如果我不偷第i家,那么第i-1家偷不偷都可以,所以不偷第i家的最大值就是第i-1家的最大值,与偷不偷i-1无关。

dp[i][1] = dp[i-1][0]+nums[i];偷第i家的最大值就是不偷第i-1家的最大值dp[i-1][0]+第i家的价值nums[i];

最后只要返回dp[n-1][0]和dp[n-1][1]中的最大值即可,而max正好是两者中的最大值,所以只要返回max即可。

动态规划问题都是这个套路,找到状态转移方程,通过初始状态算出每个状态,返回最后那个状态或者返回所有状态中的最值。

看看题解有没有新颖的解法。

题解的思路确实更清晰,他dp数组是一维的,没有分什么偷和不偷,dp[i]就表示在第i家的最大价值也就是max,那么状态转移方程就是:dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);dp[i-2]+nums[i]表示偷第i家,那么就是在第i-2家的最大值家上nums[i];dp[i-1]就是不偷第i家,那么就是第i-1家的最大值。dp[i]取两者中的最大值即可。

class Solution {
    public int rob(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int length = nums.length;
        if (length == 1) {
            return nums[0];
        }
        int[] dp = new int[length];
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0], nums[1]);
        for (int i = 2; i < length; i++) {
            dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[length - 1];
    }
}

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

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

相关文章

CentOS 7 安装 Weblogic 14 版本

安装JDK程序 注意&#xff1a;安装weblogic前&#xff0c;先安装JDK&#xff01;&#xff08;要求jdk(1.7以上)&#xff09;&#xff1a; 一、创建用户组weblogic及用户weblogic groupadd weblogic useradd -g weblogic weblogic二、将下载好的jdk及weblogic上传至/home/webl…

重量级消息,微软将ThreadX RTOS全家桶贡献给Eclipse基金会,免费供大家商用,宽松的MIT授权方式

从明年第1季度开始&#xff0c;任何人&#xff0c;任何厂家的芯片都可以免费商用&#xff0c;MIT授权就这点好。 贡献出来后&#xff0c;多方可以一起努力开发&#xff0c;当前首批兴趣小组AMD, Cypherbridge, Microsoft, NXP, PX5, Renesas, ST Microelectronics, Silicon Lab…

速记:一个TL431应用电路

一个TL431应用电路 仿真结果 输出电压为&#xff1a;5V 负载电阻为&#xff1a; R4 50Ω 如果负载R4加重 显然负载加重&#xff0c;输出就达不到5V. 三极管T1 的作用 没有三极管的情况 同样是保持负载 R 50Ω 可见三极管的作用就是用来放大电流

第十九章 解读利用pytorch可视化特征图以及卷积核参数(工具)

介绍一种可视化feaature maps以及kernel weights的方法 推荐可视化工具TensorBoard&#xff1a;可以查看整个计算图的数据流向&#xff0c;保存再训练过程中的损失信息&#xff0c;准确率信息等 学习视频&#xff1a; 使用pytorch查看中间层特征矩阵以及卷积核参数_哔哩哔哩…

rdf-file:分布式环境下的文件处理

一&#xff1a;数据量大了以后&#xff0c;单机解析或者生成文件的效率就很低&#xff0c;需要通过集群处理 机构过来的文件&#xff1a;我们先对文件进行分片&#xff0c;在利用集群集群处理分片文件。给机构文件&#xff1a;分库分表数据&#xff0c;每个分表生成一个分片文…

基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目

演示视频&#xff1a; 基于SSM的企业订单跟踪管理系统&#xff08;有报告&#xff09;。Javaee项目 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringM…

只狼 资源分享

版本介绍 v1.06版|容量15GB|官方简体中文|支持键盘.鼠标.手柄|赠官方原声4首BGM|赠多项修改器|赠一周目全义手忍具强化通关存档|2020年01月15号更新 只狼中文设置&#xff1a; https://jingyan.baidu.com/article/cb5d6105bc8556005d2fe048.html 只狼键盘对应按键&#xff1…

vite-性能优化-构建优化-cnd加速优化

CDN 加速优化 - 感觉用不大到 主要作用 &#xff1a; 将引入的依赖&#xff0c;打包部署后&#xff0c;在用户访问的时候&#xff0c; 通过网络CDN的方式进行加载&#xff0c;而非直接从你自己的服务器上加载。优点 &#xff1a; 1、直接降低了你自己的打包的体积&#xff0c…

excel表中慎用合并单元格,多用跨列居中

如下一个excel例表&#xff1a; 要将首行居中&#xff0c;最好的办法如下&#xff1a; 1、选中首行单元格 2、按下ctrl1&#xff0c;调出“设置单元格格式”&#xff0c;选中“对齐”&#xff0c;在“水平对齐”中选择“跨列居中” 3、完成任务 这样居中的好处是&#xff1a;可…

【C++】new和delete

这里是目录 C内存管理方式new/delete操作内置类型new和delete操作自定义类型定位new内存泄漏 前言 我们的程序当中主要有以下类型的数据&#xff08;用途/存储角度&#xff09;&#xff1a; 局部数据、静态数据、全局数据、常量数据、动态申请的数据 内存布局&#xff1a; C内…

KubeVela核心控制器原理浅析

前言 在学习 KubeVela 的核心控制器之前&#xff0c;我们先简单了解一下 KubeVela 的相关知识。 KubeVela 本身是一个应用交付与管理控制平面&#xff0c;它架在 Kubernetes 集群、云平台等基础设施之上&#xff0c;通过开放应用模型来对组件、云服务、运维能力、交付工作流进…

PWM(PulseWidthModulation)控制

PWM&#xff08;Pulse Width Modulation&#xff09;控制就是对脉冲的宽度进行调制的技术&#xff0c;即通过对一系列脉冲的宽度进行调制&#xff0c;来等效的获得所需要的波形&#xff08;含形状和幅值&#xff09;&#xff1b;面积等效原理是PWM技术的重要基础理论&#xff1…

【LabVIEW学习】3.labview制作安装程序

一。生成exe文件 1.创建可执行文件 &#xff08;1&#xff09;创建项目 注意&#xff1a; 1.创建.exe文件&#xff0c;这个文件在labview环境下才可以运行&#xff0c;如果直接传递给其他电脑&#xff08;没有labview环境&#xff09;&#xff0c;他是不可以运行的。 2.如果已…

原生实现底部弹窗效果 h5 小程序

<template><div class"home"><div class"btn" click"showPopupshow">弹出底部蒙层</div><div class"popup " catchtouchmove"true" :class"showPopup" ><div class"mask&q…

springframe工程导入

配置gradle工程 init.d 目录下新建init.gradle allprojects {repositories {mavenLocal()maven {allowInsecureProtocol trueurl https://maven.aliyun.com/nexus/content/repositories/central/}} } 报错Plugin [id: org.jetbrains.dokka, version: 0.10.1, apply: false] w…

单片机学习5——外部中断程序

#include<reg52.h>unsigned char a; sbit lcden P3^4;void main() {lcden0;EA1;EX01;IT00;a0xF0; //点亮4位小灯while(1){P1a;} }//中断服务程序 void ext0() interrupt 0 // 0 表示的是外部中断源0 {a0x0f; // 中断处理完&#xff0c;再返回主…

公司注册资金认缴的好处有哪些

公司注册资金认缴的好处 1、减少投资项目审批&#xff0c;最大限度地缩小审批、核准、备案范围&#xff0c;切实落实企业和个人投资自主权。对确需审批、核准、备案的项目&#xff0c;要简化程序、限时办结。同时&#xff0c;为避免重复投资和无序竞争&#xff0c;强调要加强土…

坚鹏:广州银行清华大学消费金融发展趋势与创新培训圆满结束

广州银行自1996年9月成立以来&#xff0c;依托中国经济腾飞的大好形势&#xff0c;成为国内具有一定知名度与地方特色的商业银行。截至2022年12月末&#xff0c;已开业机构174家&#xff0c;包括总行1家&#xff0c;分行级机构15家(含信用卡中心)、支行152家、信用卡分中心6家&…

系统安全测试要怎么做?

进行系统安全测试时&#xff0c;可以按照以下详细的步骤进行&#xff1a; 1、信息收集和分析&#xff1a; 收集系统的相关信息&#xff0c;包括架构、部署环境、使用的框架和技术等。 分析系统的安全需求、威胁模型和安全策略等文档。 2、威胁建模和风险评估&#xff1a; …

三菱GX WORRKS3 下载与安装

目录 下载 安装 准备好安装包 对电脑系统要求 安装 因为小编公司需要&#xff0c;所以开始了三菱plc软件的学习&#xff0c;并从今天开始记录学习&#xff0c;希望小编的内容能帮到你&#xff0c;对你的学习有帮助&#xff01; 下载 三菱电机官网 当然了&#xff0c;需要…