【算法 动态规划 简单多状态 dp 问题】打家劫舍题型

news2024/9/21 14:52:16

打家劫舍题型

  • 按摩师 (easy)
    • 解题思路
    • 代码
  • 打家劫舍II (medium)
    • 解题思路
    • 代码
  • 删除并获得点数(medium)
    • 解题思路
    • 代码

按摩师 (easy)

题目链接

该题是打家劫舍的变形

解题思路

  1. 状态表示

分析:

  • 注意题目, 对于当天的预约, 可以接受, 也可以拒绝. 所以一天中有两个状态.
  • 所以要定义两个状态, f[i] 和 g[i]
    • f[i]: 表示, 在前 i 天中, 选择接受第 i 天的预约, 一共最长工作了多少时间
    • g[i]: 表示, 在前 i 天中, 选择接受第 i 天的预约, 一共最长工作了多少时间
  1. 状态转移方程

状态转移图

在这里插入图片描述
依图可得

        f[i] = g[i - 1] + nums[i - 1];
        g[i] = Math.max(f[i - 1],g[i - 1]);
  1. 初始化

不需要

  1. 填表顺序

根据「状态转移⽅程」得「从左往右,两个表⼀起填」。

  1. 返回值

return Math.max(f[n],g[n]);

代码

class Solution {
    public int massage(int[] nums) {
        int n = nums.length;
        int[] f = new int[n + 1]; // 表示选择 i, f[i] 总预约时间最长
        int[] g = new int[n + 1]; // 表示不选择i

        for(int i = 1; i <= n; ++i) {
            f[i] = g[i - 1] + nums[i - 1];
            g[i] = Math.max(f[i - 1],g[i - 1]);
        }
        return Math.max(f[n],g[n]);
    }
}

打家劫舍II (medium)

题目链接

解题思路

环形问题想办法变成线性问题即可

  • 对于 0 号位置, 有两种情况;
    • 偷 0 号位置, 则 1 和 n -1 都不能偷了, 则对 [2,n-2] 进行一次打家劫舍即可
    • 不偷, 则对 [1,n-1] 进行一次打家劫舍即可

返回这两种情况中的最大值即可

打家劫舍解法参考按摩师解题思路, 变的只是区间问题罢了

代码

class Solution {
    int n;
    public int rob(int[] nums) {
        n = nums.length;
        if(n == 0) return 0;
        if(n == 1) return nums[0];
        return Math.max(func(nums,2,n-2) + nums[0],func(nums,1,n-1));
    }
    public int func(int[] nums, int left, int right) {
        int[] f = new int[n];
        int[] g = new int[n];

        for(int i = left; i <= right; ++i) {
            f[i] = g[i - 1] + nums[i];
            g[i] = Math.max(f[i - 1], g[i - 1]);
        }
        
        return Math.max(f[right],g[right]);
    }
}

删除并获得点数(medium)

题目链接

解题思路

分析:

  • 题目说获得 num[i] 的点数, 就要删除 num[i] -1 和 num[i] + 1 所有的值, 这就相当于偷 number 号房子, 就不能在偷 number -1 和 number + 1 号的房子
  • 不同的是, 一个房子可以连续偷多次
  • 题目给出的数据范围是 1 ~ 10000, 所以可以建立一个 int[] 类型的 hash, hash[i] 表示 i 在 num 数组中出现了多少次
  • 这样就可以对 hash 数组, 从 1 ~ 10000 进行一次打家劫舍即可

代码

class Solution {
    int  N = 10001;
    int[] hash = new int[N];
    public int deleteAndEarn(int[] nums) {
        for(int num : nums) {
            hash[num]++;
        }        
        int[] f = new int[N];
        int[] g = new int[N];
        for(int i = 1; i < N; ++i) {
            f[i] = g[i - 1] + hash[i] * i;
            g[i] = Math.max(f[i - 1], g[i -1]);
        }
        return Math.max(f[N - 1], g[N - 1]);
    }
}

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

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

相关文章

车辆远控功能自动化测试方案:打造高效可靠的测试流程

随着汽车逐步走向智能化、网联化&#xff0c;整车的功能已经不再局限于驾驶员在车内进行本地操作。在远离车辆时&#xff0c;驾驶员也可以通过手机APP下发控制指令来实现对车辆的远程控制。 近几年&#xff0c;伴随远控功能项不断增多&#xff0c;其功能逻辑也越来越复杂&…

python开发--信息的增删改

部门信息的增删改 1. 增加 点击新建部门 跳转到新建部门页面&#xff1a;http://127.0.0.1:8000/depart/add/ 在views.py里面增加如下代码&#xff0c;可以将用户输入的信息添加到数据库中 def depart_add(request):if request.method GET:return render(request, depart…

STL之my_list容器

前言&#xff1a;各位老铁好久不见了&#xff0c;今天分享的知识是自己实现一个简单的list容器&#xff0c;为什么我先跳过vector容器的自我实现呢&#xff1f;我个人觉得vector相对于list的自我实现简单一点&#xff0c;所以今天先分享实现my_list的知识 我们要实现my_list&a…

machine learning - 2

泛化误差 也可以认为是预测时的误差。 训练误差 并不是越小越好&#xff0c;太小会过拟合。 获得测试集合的方法&#xff1a; 1&#xff09;&#xff1a; 2&#xff09;&#xff1a;例如&#xff1a;k-折交叉验证法&#xff0c; 就的每k个数据取一个座位测试集 3&#xff0…

nginx容器映射配置文件后,启动一直报错提示:failed (13: Permission denied)的排查

问题现象&#xff1a; 使用harbor 的install.sh 创建docker-compose之后&#xff0c;出现nginx容器一直重启。 查看日志发现是&#xff1a;配置文件无权限。报错信息如下&#xff1a; Sep 2 16:43:13 172.28.0.1 nginx[1344]: 2024/09/02 08:43:13 [emerg] 1#0: open() “/e…

网站网站建设公司用什么

随着互联网的飞速发展&#xff0c;网站已经成为企业的重要门面和宣传工具。为了在网上展示自己的品牌形象和吸引更多的客户&#xff0c;越来越多的企业选择找专业的网站建设公司进行网站建设。那么&#xff0c;网站建设公司主要使用什么技术和方法呢&#xff1f; 首先&#xff…

四、基本电路设计笔记——4.1 DC-DC稳压电路

目录 4.1 DC-DC稳压电路 4.1.1 基于MT2492的DC-DC稳压电路 &#xff08;1&#xff09;芯片参数 &#xff08;2&#xff09;芯片引脚 &#xff08;3&#xff09;输出电压设置 4.1.2 基于MT2499A的DC-DC稳压电路 &#xff08;1&#xff09;芯片参数 &#xff08;2&#xf…

【Redis】Redis 主从复制

文章目录 1 前言2 主从模式介绍3 配置 Redis 主从结构3.1 建立复制3.2 断开复制3.3 其他特性3.4 拓扑结构 4 Redis 主从复制原理4.1 复制过程4.2 PSYNC 数据同步4.3 PSYNC 运行流程 5 主从复制流程5.1 全量复制流程5.2 部分复制流程5.3 实时复制流程 1 前言 分布式系统中存在一…

鸿誉移民:定制化移民服务,吹响全球高效率移民的嘹亮号角!

鸿誉移民&#xff1a;定制化移民服务&#xff0c;吹响全球高效率移民的嘹亮号角&#xff01; 作为国内知名海外移民服务机构&#xff0c;鸿誉移民历经多年行业沉淀&#xff0c;拥有着极其丰富的移民咨询以及移民办理经验&#xff0c;并以咨询及时精准&#xff0c;签证快捷、通…

Bean 的实例化(创建 | 获取)

Spring为Bean提供了多种实例化方式&#xff0c;包括如下4种方式&#xff1a; 第一种&#xff1a;通过构造方法实例化第二种&#xff1a;通过简单工厂模式实例化第三种&#xff1a;通过factory-bean实例化&#xff08;工厂方法模式实例化&#xff09;第四种&#xff1a;通过Fact…

智能未来:低代码与AI如何重塑企业应用开发

引言 在当今瞬息万变的商业环境中&#xff0c;企业面临着前所未有的挑战与机遇。数字化转型已经成为各行各业的必然趋势&#xff0c;而在这一过程中&#xff0c;应用开发的效率与智能化程度成为企业竞争力的重要衡量标准。传统的开发模式往往需要大量的时间和资源&#xff0c;而…

【Godot4.3】基于ShapePoints的Polygon2D扩展

概述 这同样是来自2023年7月份的一项实验性工作&#xff0c;基于最初版本的ShapePoints静态函数库&#xff0c;实现了对Polygon2D节点的扩展&#xff0c;用于创建参数化图形的Polygon2D节点。 Polygon2D节点本身只能通过顶点绘制工具&#xff0c;创建很随意的多边形。通过Sha…

MySQL数据库管理系统下载安装

一. MySQL概述&#xff1a; 1.数据库相关概念 数据库&#xff1a;存储数据的仓库&#xff0c;数据是有组织地进行存储&#xff08;DataBase 简DB&#xff09;数据库管理系统&#xff1a;操纵和管理数据库的大型软件 &#xff08;DataBase Management System 简DBMS)SQL:操…

一分钟创建自己的分班查询系统,家长扫码即可进群

开学后&#xff0c;老师们的忙碌也达到了顶峰。整理教材、准备课程计划、布置教室&#xff0c;这些工作已经让人应接不暇&#xff0c;更别提还要处理分班事宜。以往&#xff0c;老师们需要一个个通知家长分班结果&#xff0c;这不仅耗时耗力&#xff0c;还容易出错。家长们也常…

​数字IC设计基本概念之多时钟设计​

当设计中使用了多个时钟时&#xff0c;这些时钟域之间的关系可能是synchronous、asynchronous或者exclusive的。如下所示&#xff1a; Synchronous&#xff1a; Asynchronous&#xff1a; Exclusive&#xff1a; 需要人为地指定设计中时钟之间的关系&#xff0c;EDA工具才能正…

燃油车淘汰倒计时开始了?

文 | AUTO芯球 作者 | 璇子 新能源车要取代燃油车了&#xff1f; 油车车主先别喷啊 就在上个月 新能源乘用车月销量数据一经公布 我一看 渗透率居然达到了惊人的51% 啥概念啊 如果卖100台车 51台都是新能源 其他49台才是燃油车 看到这数据 有好多看热闹的人就在说 …

Vue组件:创建组件、注册组件、使用组件

1、创建组件 组件&#xff08;component&#xff09;是 Vue.js 最强大的功能之一。通过开发组件可以封装可服用的代码&#xff0c;将封装好的代码注册成标签&#xff0c;扩展 HTML 元素的功能。几乎任意类型应用的界面都可以抽象为一个组件树&#xff0c;而组件树可以用独立可…

【完-移动云-基础】移动云架构和ECS

一、移动云产品架构 产品架构分为IaaS、PaaS、SaaS 我司使用的是IaaS&#xff0c;仅托管了服务器资源。软件则由浪潮提供。 一图理解三者区别 二、云主机ECS 是一种弹性按需提供的云端服务器&#xff0c;可选择不同的配置 基础服务&#xff1a; 虚拟化、镜像、云硬盘、云…

autoware整体架构的分析

autoware framework sensinglidar driver&#xff08;lidar驱动&#xff09;PointCloud Preprocessing&#xff08;点云预处理&#xff09;Detection&#xff08;检测&#xff09;GNSS (全球导航卫星系统)IMU (惯性测量单元) Localization&#xff08;定位&#xff09;Pose Ini…

产品需求过程管理重要性

产品需求过程管理重要性 背景 以下都是真实事项经历回顾&#xff0c;在产品开发过程中&#xff0c;产品经理与研发团队之间的沟通至关重要。然而&#xff0c;沟通不畅或信息缺失常常导致需求无法准确传达&#xff0c;最终影响产品的成功。以下是一些常见的问题&#xff1a; 1.需…