Java 动态规划 Leetcode 213. 打家劫舍 II

news2024/11/23 3:58:59

代码展示:

class Solution {
    public int rob(int[] nums) {
        int n=nums.length;
        return Math.max(nums[0]+childRob(nums,2,n-2),childRob(nums,1,n-1));
    }
    public int childRob(int[]nums,int left,int right){
        if(left>right){
            return 0;
        }
        int n=nums.length;
        //创建数组
        int[]f=new int[n];  //偷num[i]时所得的最大金额
        int[]g=new int[n];  //不偷num[i]时所得的最大金额
        //初始化
        f[left]=nums[left];
        //填充数组
        for(int i=left+1;i<=right;i++){
            f[i]=nums[i]+g[i-1];
            g[i]=Math.max(f[i-1],g[i-1]);
        }
        //返回值
        return Math.max(f[right],g[right]);
    }

}

        该题其实是Java 动态规划 面试题 17.16. 按摩师的变种,增加了一个首尾是相邻的条件,而我们解决该题也要用到链接的这道题的思想,可以先去看一下上面这篇博客

此题可以采用动态规划的方法进行解决,根据解决动态规划题目的5大步骤进行逐步分析

        1.状态表示

                对于一个环形的题目,我们一般要进行分析,根据条件来将环形的问题分解成线性的问题

                由于是首尾之间的联系导致了环形问题的出现,所以我们可以分为两种情况

                        (1).偷nums[0]

                                此时我们便不能偷nums[1]和nums[n-1],所以此时我们能偷的就只有下标2至n-2,而在2至n-2中便没有了环形关系,此时对数组中2至n-2下标的处理便和Java 动态规划 面试题 17.16. 按摩师的处理一模一样,即此时能偷得的最大金额为nums[0]+childRob(nums,2,n-2)

                        (2).不偷nums[0]

                                此时对于num[1]和num[n-1]我们可以选择偷或者不偷,说明在1至n-1范围是线性关系,所以我们对数组nums中的下标1至n-1位置进行线性关系的处理即可,即childRob(nums,1,n-1)

        2.状态转移方程

                在childRob中是线性关系,对于i位置我们可以选择偷或者不偷,偷num[i]位置得到的最大金额我们存入f[i],不偷num[i]位置得到的最大金额我们存入g[i]

                        (1).偷num[i]位置,偷了num[i]位置我们便不能num,所以我们此时得到的最大金额为 f[i]=nums[i]+g[i-1];

                        (2).不偷num[i]位置,不偷num[i]位置我们可以选择偷num[i-1]的位置,或者不偷,哪种方法得到的金额最大用那种,所以我们此时得到的最大金额为g[i]=Math.max(f[i-1],g[i-1]);

        3.初始化

                由于计算i位置需要依靠i-1位置,所以0下标会越界,初始化0下标即可

        4.填充数组

                根据推出的状态转移方程对数组进行填充

        5.返回值

                由于对于环形的问题我们分为l两种情况,而两种情况中的最大值才是我们需要返回的答案

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

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

相关文章

Unity基础 物理系统 铰链关节 Hinge Joint

铰链关节是一种模拟物理系统中的连接方式&#xff0c;它允许两个物体围绕一个共同的轴点旋转。这种连接方式可以用于模拟门、摆钟、机器人手臂等各种物理运动。 Connected Body&#xff08;连接体&#xff09;&#xff1a;这是铰链关节连接的另一个刚体。通过设置这个属性&…

谷歌自研芯片秘辛首次曝光;黑客要价 10 万美元出售雷蛇源代码等数据;百川智能发布 Baichuan-13B大模型(提供源码)

2023年7月12日科技新闻要点&#xff01;10秒概览&#xff01; 1.科大讯飞&#xff1a;下半年 all in 星火大模型 2.百川智能发布 Baichuan-13B&#xff08;源代码和安装及训练教程作为福利在文章最后告诉获取方式&#xff09; 3.谷歌自研芯片秘辛首次曝光 4.黑客要价 10 万…

第二十五章:InnoDB的数据存储结构

第二十五章&#xff1a;InnoDB的数据存储结构 25.1&#xff1a;数据库的存储结构&#xff1a;页 ​ 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说是存储在页结构中。另一方面&#xff0c;索引是在存储引擎中…

N天爆肝数据库——MySQL(3)

本篇文章&#xff0c;主要对DCL、 函数、 约束和多表查询进行知识总结和学习。 期待和大家一起学习进步。DCL DCL-介绍 数据控制语言&#xff0c;用来管理数据库用户、控制数据库的访问权限。DCL-管理用户 查询用户 USE mysql; SELECT * FROM user; 创建用户 CREATE US…

Overleaf论文投稿

1.Overleaf 具体投稿 一步一步教&#xff01;&#xff01;&#xff01;以Springer Nature为例 2.如何在overleaf上寻找会议或期刊的模板 LaTex期刊模板下载与使用

Mocha Pro 2023 v10.0.2(win/mac)无套路安装教程

Mocha Pro 2023 Mocha Pro是一款世界知名的软件和插件&#xff0c;用于平面运动跟踪、旋转描记、对象移除、图像稳定和PowerMesh有机扭曲跟踪。 Mocha的工具对于视觉效果和后期制作至关重要&#xff0c;在最近每一部获得奥斯卡最佳视觉效果提名的电影中都发挥了重要作用。了解…

天翎MyApps低代码平台案例分享—阿米检测设备管理系统

项目背景&#xff1a;阿米检测技术有限公司&#xff08;以下简称为“阿米检测”&#xff09;隶属于中国航天科技集团&#xff0c;是北京航天计量测试技术研究所下属全资公司&#xff0c;2018年由国家财政部正式发文批准成立。司转化航天高端技术&#xff0c;开展测量方法应用、…

【dij变形】牛客练习赛93 C

C-点权_牛客练习赛93 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 重要的是在松弛的时候要满足什么条件才开始松弛 这里是用两个点来松弛一个点 Code&#xff1a; #include <bits/stdc.h>//#define int long longusing namespace std;const int mxn1e510; co…

Android的内存泄漏分析

目录 1、内存详情 1.1、内存溢出 1.2 、内存泄漏 1.3、内存抖动 2、垃圾回收机制 2.1、垃圾回收算法&#xff08;标记--清除&#xff09; 2.2、垃圾回收算法&#xff08;标记--整理&#xff09; 2.3、复制算法 2.4、分代回收算法 3.GCRoot原理 3.1、可达性分析法…

VSCODE 设置同步network Error 问题

前言 这个问题等解决方法如下&#xff1a; 获取到github以及vscode-auth.github.com的ip&#xff0c;添加到host&#xff0c;随后使用命令行刷新host&#xff0c;重新认证即可 第一步&#xff0c;查看log文件&#xff0c; 打开 vscode&#xff0c;使用快捷指令ctrl(command)…

对象池介绍

对象池介绍 对象池是一种常见的优化技术&#xff0c;用于减少游戏运行时的内存分配和垃圾回收。对象池维护了一组已经创建的对象实例&#xff0c;这些对象可以被多次重复使用&#xff0c;而不需要每次都重新创建和销毁。对象池的主要优点是可以减少内存分配和垃圾回收的次数&a…

第一百零四天学习记录:C++核心:类和对象Ⅶ(五星重要)继承下

继承同名成员处理方式 1、访问子类同名成员&#xff0c;直接访问即可 2、访问父类同名成员&#xff0c;需要加作用域 #include<iostream> using namespace std; class Base { public:Base(){m_A 100;}int m_A;void func(){cout << "Base - func()调用"…

途乐证券-逆市拉升!这一板块超10股涨停

7月12日&#xff0c;A股商场全体走低&#xff0c;个股跌多涨少&#xff0c;厄尔尼诺的冲击波也“搅动”了A股商场&#xff0c;种业、虚拟电厂等概念股纷繁走强。轿车产业链个股继续活泼&#xff0c;超10股涨停。 2023年中期成绩预告仍如火如荼发表中&#xff0c;成绩“预喜”股…

SpringCloud入门实战(十三)Nacos服务注册与发现+配置管理详解

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

电脑网络最基本的常识简介(合集)

电脑网络最基本的常识简介 什么是HTML? HTML(Hyper Text Mark-up Language )即超文本标记语言&#xff0c;是 WWW 的描述语言&#xff0c;由 Tim Berners-lee提出。设计 HTML 语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起&a…

蚁群算法—ACA

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、蚁群算法简介&#x1f353;1.ACA基本思想2.ACA基本原理3.ACA基本步骤 二、算法求解TSP问题&#x1f34e;1.导入数据2.计算城市间相互距离3.初始化参数4.迭代寻找最佳路径5.结果显示End 一、蚁群算法简介&a…

软件 - 配置安装 Photoshop 的 RID 独立运行版本

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131673004 Adobe Photoshop 是一款专业的图像处理软件,广泛应用于平面设计、摄影、插画、视频制作等领域,可以对各种格式的图片进行编辑、修饰、合成、优化等操作,创…

SpringBoot + Vue 实现酒店客房管理系统

目录 1 问题的提出 5 2系统开发的可行性研究 6 2.1 技术上可行性分析 6 系统现阶段的发展过程中&#xff0c;利用现有人力和物力是完全具备的能力开发出来 6 2.2 经济的可行性分析 6 2.3 操作可行性分析 6 3 需求分析 7 3.1 需求描述 7 3.2 功能需求分析 7 3.3 非功能需求分析…

JDBC学习笔记

目录 一、JDBC 1&#xff1a;为什么要学习JDBC技术 2、JDBC技术概述与理解 3、JDBC使用步骤分析 3.1、注册驱动 3.2 、获取连接 3.3、创建发送sql语句对象 3.4、发送sql语句 3.5、结果集解析 3.6、资源关闭 一、JDBC 1&#xff1a;为什么要学习JDBC技术 1、Java和数…