【动态规划】力扣198.打家劫舍

目录

  • 一、题目
  • 二、思路
    • 1.递归
    • 2.递推
  • 三、代码

一、题目

在这里插入图片描述

二、思路

1.递归

题目中指出不可以选相邻的房间,说明如果选了第 1 间,那么第 2 间一定不可以选,第 3 间房间可以选,也可以不选……假设是按照从第 1 间房间开始依次往后选,每一间房间的选择都会影响到后面的房间可不可以被选择。
对于每间房子(i)都是只有两种选择的,要么选要么不选,假设解决当前问题的函数为 dfs():

  • 不选第 i 间:那么可以考虑被选不选第 i - 1间房,相当于将问题规模缩小到了求解 i - 1间房间可以获得的最高金额,即从 dfs(i) 缩小到了 dfs(i - 1)
  • 选第 i 间:与之相邻的第 i - 1间房肯定没有被选,再继续往回倒推,第 i - 2 间房间可以考虑被选择。选第 i 间房的获得金额 nums[i] 是确定的,那么总共的最大金额就取决于前 i - 2 间房子得到的最大金额,即将问题变为 dfs(i - 2) + nums[i]

综上,对于第 i 间房的选择一共有两种情况,只要选择总金额最高的那个就好,于是 ans = max(dfs(i - 1), dfs(i - 2) + nums[i]),写出相应的代码:

class Solution {int[] nums;public int rob(int[] nums) {this.nums = nums;int ans = dfs(nums.length - 1);return ans;}public int dfs(int i) {if (i < 0) {return 0;}int ans = Math.max(dfs(i - 1), dfs(i - 2) + nums[i]);return ans;}
}

但这样提交会发现超时。

2.递推

在递归的基础上,创建一个数组 dp[] 来存储之前计算过的结果,避免重复计算。
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i])

三、代码

class Solution {public int rob(int[] nums) {int n = nums.length;if (n < 2) {Arrays.sort(nums);return nums[n - 1];}int[] dp = new int[n];// dp[i] 表示从前 i 个房间中可以获得的最高金额dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);for (int i = 2; i < n; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);}return dp[n - 1];}
}

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

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

相关文章

OCR应用之集装箱箱号自动识别技术,原理与应用

集装箱箱号自动识别技术是现代物流领域中的一项重要技术&#xff0c;它通过先进的图像识别、字符识别等技术手段&#xff0c;实现了对集装箱箱号的快速、准确识别。这一技术不仅大大提高了物流效率&#xff0c;降低了运营成本&#xff0c;还成为了港口、码头、堆场等场所减员增…

Vue学习笔记(六)

模板引用(获取DOM 操作) 虽然Vue的声明性渲染模型为你抽象了大部分对DOM的直接操作&#xff0c;但在某些情况下&#xff0c;我们仍然需要直接访问底层DOM元素。要实现这一点&#xff0c;我们可以使用特殊的refattribute。 挂载结束后引用都会被暴露在this.$refs之上。 <s…

QT linux 打包时库和插件如何生成

在Linux下使用Qt创建应用程序包时&#xff0c;插件需要以下步骤生成&#xff1a; 确保你的Qt应用程序已经正确编译并且能够运行。 使用linuxdeployqt工具来打包你的应用程序。这个工具会自动收集所需的库和插件&#xff0c;并将它们打包到一个AppImage或者一个tarball中。 首…

.NetCore中事务没有正常完成

1. 示例代码 async Task<string> FunCode() {//业务代码using var trans TransactionHelper.GetTransactionScope();//插入表A&#xff0c;A中有Name字段await 数据库操作1;await 数据库操作2; trans.Complete();//调用其他系统接口await ERP.SendContent(); } 2. …

[NeetCode 150] Counting Bits

Counting Bits Given an integer n, count the number of 1’s in the binary representation of every number in the range [0, n]. Return an array output where output[i] is the number of 1’s in the binary representation of i. Example 1: Input: n 4Output: […

QT项目-仿QQ聊天(带宠物系统)

目录 一&#xff0c;项目介绍 二&#xff0c;开发环境 三&#xff0c;涉及技术 四&#xff0c;项目效果示例图 1&#xff0c;登录界面 2&#xff0c;主界面 3&#xff0c;聊天界面 4&#xff0c;功能界面 5&#xff0c;宠物界面 一&#xff0c;项目介绍 这是一个基于u…

Sampling采样与Virtual Columns虚拟列

1.大数据体系下&#xff0c;在真正的企业环境中&#xff0c;很容易出现很大的表&#xff0c;比如体积达到 TB 级别.对这种表一个简单的 SELECT * 都会非常的慢&#xff0c;哪怕 LIMIT 10 想要看 10 条数据&#xff0c;也会走 MapReduce 流程 这个时间等待是不合适的.Hive 提供的…

Kafka之消费者客户端

1、历史上的二个版本 与生产者客户端一样&#xff0c;在Kafka的发展过程当中&#xff0c;消费者客户端主要有两个大的版本&#xff1a; 旧消费者客户端&#xff08;Old Consumer&#xff09;&#xff1a;基于Scala语言开发的版本&#xff0c;又称为Scala消费者客户端。新消费…

蚁剑连接本地木马文件报错

项目场景&#xff1a; 本地搭建php和蚁剑环境&#xff0c;连接本地木马文件ma.php 问题描述 使用蚁剑连接localhost时报错 错误{ "address":"127.0.0.1" "code":"ECONNREFUSED", "errno":"ECONNREFUSED", &qu…

【JVM】——JVM运行机制、类加载机制、内存划分

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;JVM引入 1&#xff1a;编程语言 2&#xff1a;JAVA运行机制 二&#xff1a;JVM中内存…

1U服务器和Hyper-V虚拟机使用记录

记录最近接触服务器和虚拟机的一些使用操作知识 背景&#xff1a;1U服务器上架使用&#xff0c;备份其他服务器vm虚拟机&#xff0c;Hyper-V管理虚拟机使用测试 设备&#xff1a;IBM3550服务器交换机&#xff0c; 移动硬盘&#xff1a;附加存储盘&#xff0c; u盘1&#xff1…

Openshift上使用Elasticsearch (ECK) Operator部署ES

部署 7.16.2 版本 Elasticsearch (ECK) Operator部署ES oc new-project middleware-elasticsearchapiVersion: elasticsearch.k8s.elastic.co/v1 kind: Elasticsearch metadata:name: es-testnamespace: middleware-elasticsearch spec:http:tls:selfSignedCertificate:disab…

go高并发之路——本地缓存

一、使用场景 试想一个场景&#xff0c;有一个配置服务系统&#xff0c;里面存储着各种各样的配置&#xff0c;比如直播间的直播信息、点赞、签到、红包、带货等等。这些配置信息有两个特点&#xff1a; 1、并发量可能会特别特别大&#xff0c;试想一下&#xff0c;一个几十万…

Anchor DETR:Transformer-Based目标检测的Query设计

写在前面 文中指出之前DETR-like算法存在以下问题&#xff1a; 之前DETR-liked检测算法里&#xff0c;object query是一组可学习的嵌入表示&#xff08;就是一组256-d的向量&#xff09;&#xff0c;缺乏明确的物理意义&#xff0c;不能解释它们会关注什么地方。每个object q…

探索现代软件开发中的持续集成与持续交付(CI/CD)实践

探索现代软件开发中的持续集成与持续交付&#xff08;CI/CD&#xff09;实践 随着软件开发的飞速进步&#xff0c;现代开发团队已经从传统的开发模式向更加自动化和灵活的开发流程转变。持续集成&#xff08;CI&#xff09; 与 持续交付&#xff08;CD&#xff09; 成为当下主…

【SSM-Day5】SpringMVC

【SSM-Day5】SpringMVC Web->Servlet->Servlet容器MVC档案SpringMVC档案SpringMVC核心操作&#x1f4e2;建立连接RequestMapping&#xff1a;实现路由映射Controller/ResponseBody&#xff1a;表示Spring某个类是否可以接收HTTP请求 &#x1f4e2;接收请求1. 直接接收一个…

【skywalking 】选择Elasticsearch存储

介绍 skywalking支持 Elasticsearch 和 OpenSearch 作为存储。 OpenSearch 是 ElasticSearch 7.11 的一个分支&#xff0c;但在 Apache 2.0 中获得许可。 OpenSearch 存储与 ElasticSearch 共享相同的配置。为了激活 OpenSearch 作为存储&#xff0c;请将存储提供程序设置为e…

MySQL中的Redo Log、Undo Log和Binlog:深入解析

引言 在数据库管理系统中&#xff0c;日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统&#xff0c;提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog&#xff0c;从背景、业务场景、功能、底层…

【QT】Qt窗口(上)

个人主页~ Qt窗口 一、菜单栏二、工具栏三、状态栏四、浮动窗口 Qt窗口是通过QMainWindow类来实现的&#xff0c;我们之前的学习是通过QWidget类实现的 QMainWindow包含一个菜单栏Menu Bar②&#xff0c;多个工具栏Tool Bars③&#xff0c;多个浮动窗口Dock Widgets&#xff0c…

CISC(Complex Instruction Set Computer)和RISC(Reduced Instruction Set Computer)

CISC&#xff08;Complex Instruction Set Computer&#xff09;和RISC&#xff08;Reduced Instruction Set Computer&#xff09;是两种不同类型的指令集架构&#xff08;ISA&#xff09;&#xff0c;它们在设计理念、指令复杂性、寻址方式、实现方式以及应用场景上存在显著差…