【动态规划算法】之打家劫舍Ⅱ

news2024/11/25 22:44:14

2.打家劫舍 II

在这里插入图片描述
和上一个比不同的就是,现在房屋围了一圈,第一个和最后一个相连

这道题目和198.打家劫舍 (opens new window)是差不多的,唯一区别就是成环了

对于一个数组,成环的话主要有如下三种情况:

  • 情况一:考虑不包含首尾元素

  • 情况二:考虑包含首元素,不包含尾元素

  • 情况三:考虑包含尾元素,不包含首元素


注意我这里用的是"考虑",例如情况三,虽然是考虑包含尾元素,但不一定要选尾部元素! 对于情况三,取nums[1] 和 nums[3]就是最大的。

而情况二 和 情况三 都包含了情况一了,所以只考虑情况二和情况三就可以了。剩下的就和打家劫舍Ⅰ一样

代码如下

public static int rob(int[] nums) {
        if (nums.length == 0 || nums == null) {
            return 0;
        }
        if (nums.length == 1) {
            return nums[0];
        }
        int result1=fun(nums,0,nums.length-2);//情况二考虑首元素,不含尾元素
        int result2=fun(nums,1,nums.length-1);//情况三考虑尾元素,不含首元素
        return Math.max(result1,result2);

    }
    static int fun(int[] nums, int start, int end){
        //首尾相同 说明只有一个元素
        if (start==end){
            return nums[start];
        }
        int[] dp = new int[nums.length];
        dp[start] = nums[start];
        dp[start+1] = Math.max(nums[start], nums[start+1]);
        //因为成环了 所以首元素不是得从给定的satrt开始
        for (int i = start+2; i <= end; i++) {
            //如果偷第i个 那么应该是dp[i-2]+nums[i]
            //如果不偷第i个就可以考虑偷第i-1个 dp[i-1]
            dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[end];
    }

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

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

相关文章

人工智能:从基础到前沿

人工智能&#xff1a;从基础到前沿 引言 当我们谈论“人工智能”&#xff08;AI&#xff09;时&#xff0c;我们其实是在谈论一个涵盖了众多学科、技术和应用的广阔领域。从计算机视觉到自然语言处理&#xff0c;从机器人学到深度学习&#xff0c;AI已经成为我们生活中不可或…

【OAuth2】授权框架的四种授权方式详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《OAuth 2》。&#x1f3af;&#x1f3af; &#x1…

超维空间S2无人机使用说明书——21、VINS视觉定位仿真

引言&#xff1a;为了实现室内无人机的定位功能&#xff0c;S系列无人机配置了VINS-FUSION定位环境&#xff0c;主要包含了仿真跑数据集和实际操作部分。为了提前熟悉使用原理&#xff0c;可以先使用仿真环境跑数据集进行学习和理解 硬件&#xff1a;1080P显示器、Jetson orin…

PYQT的使用入门

上一章节&#xff1a;VSCode安装PYQT5-CSDN博客 QTDesigner初识 vscode导航栏右键&#xff0c;新建ui文件&#xff0c;弹出QT Designer。 完成创建后&#xff0c;可以在新窗口中进行UI布局。 QTDesigner左侧为组件库&#xff0c;中间为UI布局界面&#xff0c;右侧分别为对象…

Anylogic Pro 8.8.x for Mac / for Linux Crack

Digital twins – a step towards a digital enterprise AnyLogic是唯一一个支持创建模拟模型的方法的模拟建模工具&#xff1a;面向过程&#xff08;离散事件&#xff09;、系统动态和代理&#xff0c;以及它们的任何组合。AnyLogic提供的建模语言的独特性、灵活性和强大性使…

Redis数据库——键空间

一.服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中&#xff0c;db数组的每一个项都是一个redis.h/redisDb结构&#xff0c;每一个RedisDb结构代表一个数据库。 在初始化服务器时&#xff0c;程序会根据服务器状态的dbnum属性来…

喷淋实验--嵌入式实训

喷淋实验--嵌入式实训 1.MQTT通信原理 采集信息&#xff1a; 小程序/Linux 订阅者 1703161172612/AIOTSIM2APP 元宇宙 发布者 1703161172612/AIOTSIM2APP Linux订阅的主题是元宇宙发布的主题 控制设备&#xff1a; 小程序/Linux 发布者 1703161172612/APP2AIOTSIM 元宇宙 订阅者…

java并发编程八 CAS 与 volatile和原子整数与原子引用

文章目录 CAS 与 volatile慢动作分析volatile为什么无锁效率高CAS 的特点 原子整数原子引用不安全实现安全实现-使用锁安全实现-使用 CAS CAS 与 volatile 在java并发编程七六中&#xff0c;可以看到的 AtomicInteger 的解决方法&#xff0c;内部并没有用锁来保护共享变量的线…

前端扫盲:什么是API网关?为什么它有用?

API 通常被称为应用程序从后端服务访问数据和业务逻辑的前门。API 本质上是一个软件向其他人或程序提供的接口&#xff0c;允许他们与该软件进行交互。 在创建 API 时&#xff0c;需要选择编程语言(Java、Python、PHP 等)来编写 API 逻辑&#xff0c;还需要将 API 部署到服务器…

前端项目为什么需要 TypeScript 来强化?

什么是TypeScript? TypeScript 是一个为开发大规模应用程序而设计的语言。它是 JavaScript 的一个超集&#xff0c;包含 JavaScript 全部的功能&#xff0c;并扩展了一些新的特性。具体来说&#xff0c;TypeScript 增加了如类型注解和编译时类型检查等特性&#xff1a; let n…

制作自己的 Docker 容器

软件开发最大的麻烦事之一&#xff0c;就是环境配置。用户必须保证操作系统的设置&#xff0c;各种库和组件的安装&#xff0c;只有它们都正确&#xff0c;软件才能运行。docker从根本上解决问题&#xff0c;软件安装的时候&#xff0c;把原始环境一模一样地复制过来。 以 koa-…

分布式事务三阶段提交3PC详解

文章目录 概述工作流程优缺点总结代码样例 概述 3PC 利用超时机制解决了 2PC 同步阻塞问题&#xff0c;避免资源被永久锁定&#xff0c;进一步加强了整个事务过程可靠性。但 3PC 同样无法应对类似宕机问题&#xff0c;只不过出现多数据源中数据不一致问题概率更小。 a. 概念&a…

Python中json模块的使用与pyecharts绘图的基本介绍

文章目录 json模块json与Python数据的相互转化 pyecharts模块pyecharts基本操作基础折线图配置选项全局配置选项 json模块的数据处理折线图示例示例代码 json模块 json实际上是一种数据存储格式&#xff0c;是一种轻量级的数据交互格式&#xff0c;可以把他理解成一个特定格式…

Spark编程实验三:Spark SQL编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Spark SQL的基本编程方法&#xff1b; 2、熟悉RDD到DataFram…

springboot实现发送邮件开箱即用

springboot实现发送邮件开箱即用 环境依赖包yml配置Service层Controller层测试 环境 jdk17 springboot版本3.2.1 依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><ver…

【OAuth2】:赋予用户控制权的安全通行证--原理篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于OAuth2的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么是OAuth? 二.为什么要用OAuth?…

第11章 GUI Page400~402 步骤二 画直线

运行效果&#xff1a; 源代码&#xff1a; /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…

《每天一分钟学习C语言·九》引用,指针函数,函数指针等

1、 普通全局变量——作用域是整个源程序&#xff08;含有多个源文件&#xff0c;在各个源文件中都有效&#xff09; static全局变量——作用域在当前源文件 2、 引用 &#xff08;1&#xff09;申明引用的同时必须要初始化 &#xff08;2&#xff09;引用变量是目标变量的一个…

Windows 11中显示文件扩展名的方法与Windows 10大同小异,但前者更人性化

默认情况下&#xff0c;Windows 11会隐藏已知文件类型的文件扩展名。这可能会使在不首先打开文件的情况下很难识别文件类型。 幸运的是&#xff0c;你可以将Windows 11配置为显示已知文件类型的扩展名。该方法类似于Windows 10&#xff0c;但该选项现在组织在下拉菜单中&#…

分布式锁功效初探——以电商问题为例

文章目录 电商库存问题单机处理-Sychronized多机器处理-分布式锁入门级别&#xff0c;用redis实现&#xff0c;setnx问题1&#xff1a;逻辑可能异常&#xff0c;造成死锁问题2&#xff1a;机器宕机问题3&#xff1a;锁一直失效&#xff0c;乱套锁续命 redisson分布式丢锁问题主…