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

打家劫舍题型

  • 按摩师 (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]; // 表示不选择ifor(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.rhkb.cn/news/415139.html

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

相关文章

C语言遇见的一些小问题

问题如下&#xff1a; 1&#xff1a;为什么这样的代码为报错 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <algorithm> #include <cstdio> #include<string> #include<stdlib.h> using namespace std; int main() {int i …

mysql5.7 TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ 换版8版本 引发的问题

mysql5.7 TIMESTAMP NOT NULL DEFAULT 0000-00-00 00:00:00 换版引发的问题 问题背景sql_mode上机演示5.78.4 问题背景 在项目mysql版本由5.7 换版到8.4版本后&#xff0c;我们进行回归测试时&#xff0c;却发现一个积年代码报错了&#xff0c;是数据库插入报的错 xxx can not…

华为IS-IS实验及配置

AR1配置 #进入ISIS进程 isis 1 #配置设备类型为Level-1is-level level-1 #定义区域和System-ID等信息network-entity 49.0001.0010.0000.0001.00 #ISIS邻居命名is-name AR1 #接口配置IP和启用ISIS interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.0 isis ena…

数仓基础(六):离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 二、实时数仓建设思路 离线与实时数仓区别和建设思路 ​​​​​​​一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下&#xff1a; 对比方面 离线数仓 实时数仓 架构选择 传统大数据架构 …

Ribbon负载均衡底层原理

springcloude服务实例与服务实例之间发送请求&#xff0c;首先根据服务名注册到nacos&#xff0c;然后发送请求&#xff0c;nacos可以根据服务名找到对应的服务实例。 SpringCloudRibbon的底层采用了一个拦截器&#xff0c;拦截了openfeign发出的请求&#xff0c;对地址做了修…

【C++】将myString类中能够实现的操作都实现一遍

myString.h #ifndef MYSTERAM_H #define MYSTERAM_H #include <iostream> #include<cstring> using namespace std; class myString { private:char *str; //字符串int size; //字符串容量char error[20] "error"; public://无参构造myString():siz…

深入解析FPGA在SOC设计中的核心作用

在集成系统SoC设计中&#xff0c;CPU核心的嵌入至关重要&#xff0c;以实现软硬件的有效交互。此过程中涉及到功能IP&#xff08;如图像处理、无线通信等&#xff09;的验证和整合&#xff0c;利用硬件描述语言(HDL)来实现可编程逻辑(FPGA)&#xff0c;并通过验证技术提高设计效…

Django Admin对自定义的计算字段进行排序

通常&#xff0c;Django会为模型属性字段&#xff0c;自动添加排序功能。当你添加计算字段时&#xff0c;Django不知道如何执行order_by&#xff0c;因此它不会在该字段上添加排序功能。 如果要在计算字段上添加排序&#xff0c;则必须告诉Django需要排序的内容。你可以通过在…

【机器学习】神经网络、隐藏层的基本概念、如何选择隐藏层数量以及胶囊网络对神经网络的影响

引言 神经网络是机器学习的一种方法&#xff0c;它通过模拟人脑神经元的工作原理来构建算法 文章目录 引言一、神经网络1.1 定义1.2 主要组成部分1.3 工作原理1.4 应用1.5 类型1.6 优化算法1.7 总结 二、隐藏层2.1 定义2.2 隐藏层的作用2.3 隐藏层的数量和大小2.4 隐藏层的结构…

单片机-STM32 时钟(六)

1.时钟的概念 在我们单片机中&#xff0c;时钟主要是用于 提供一个工作的频率&#xff0c;时钟信号越大&#xff0c;设备执行的速度就越快。 时钟---处理器运行的频率---72MHZ Dbus--数据总线 AHB--总线桥 APB2--外设总线2&#xff08;时钟&#xff09; APB1--外设总线1&a…

基于Java+SpringBoot+Vue的植物健康系统

基于JavaSpringBootVue的植物健康系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345; 某信 gzh 搜索【智能编程小助手】获取项…

[C++11#44](一) 统一的列表初始化 | 声明 | STL中一些变化 | emplace的优化 | move

目录 0. 回忆 1.隐式类型转化 特性 1.统一的列表初始化 1.{}初始化 2.2 std::initializer_list 二、声明 1.auto 2.decltype 3.nullptr 宏定义的例子 使用 const 和 enum 替代宏 4. 范围 for 循环 5.final与override final 关键字 override 关键字 示例代码 智…

wpf prism 《3》 弹窗 IOC

传统的弹窗 这种耦合度高 new 窗体() . Show(); new 窗体() . ShowDialog(); 利用Prism 自动的 IOC 弹窗的 必须 必须 必须 页面控件 弹窗的 必须 必须 必须 页面控件 弹窗的 必须 必须 必须 页面控件 弹窗的 必须 必须 必须 页面控件 弹窗的 必须 必须 必须 页面控件 》》否…

惠中科技光伏清洗剂:绿色清洁,引领光伏行业新潮流

在当今全球能源转型的大潮中&#xff0c;光伏产业作为绿色能源的重要组成部分&#xff0c;正以前所未有的速度蓬勃发展。然而&#xff0c;随着光伏板在户外环境的长时间暴露&#xff0c;其表面不可避免地会积累灰尘、鸟粪、油污等污染物&#xff0c;严重影响光伏板的透光率和发…

tiny_qemu模拟qemu虚拟化原理

一、模仿一个x86平台虚机 cpu虚拟化原理来源于Linux虚拟化KVM-Qemu分析&#xff08;四&#xff09;之CPU虚拟化&#xff08;2&#xff09; 笔者就实现了下相关操作。看汇编是在x86平台下操作的&#xff0c;其中两个文件分别是 1.tiny_kernel.S start: /* Hello */ mov …

数据安全与个人信息保护的辨析

文章目录 前言一、合规1、合规的目标导向原则2、监管平衡的原则二、基础设施1、公共基础设施2、企业基础设施三、数据流通1、数据生产要素是数字化时代生产要素的变革理论2、数据产品的保护源自于数据产品的价值四、产品与服务1、数据安全与网络安全2、数据安全的分类分级与数据…

Unity(2022.3.41LTS) - UI详细介绍-Scrollbar(滚动条)

目录 零.简介 一、基本功能与用途 二、组件介绍 三、使用方法 四、优化和注意事项 五.和滑动条的区别 零.简介 在 Unity 中&#xff0c;滚动条&#xff08;Scrollbar&#xff09;是一种用于实现滚动功能的 UI 组件。 一、基本功能与用途 滚动内容&#xff1a;主要用于…

NeRF原理学习

一个2020年的工作我现在才来学习并总结它的原理&#xff0c;颇有种“时过境迁”的感觉。这篇总结是基于NeRF原文 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 阅读理解后写的&#xff0c;作用是以后如果记不太清了可以回忆。 目的&应用 先说…

Java项目:128 基于Spring Boot的装饰工程管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统包含管理员、员工和客户角色 管理员权限操作的功能包括管理合同信息&#xff0c;管理合同报价&#xff0c;管理立项项目&#xff0c;管…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-24 TPG图像测试数据发生器设计

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…