198/213动态规划之打家劫舍系列

news2024/10/3 0:25:54

这两天在学习的时候,发现有个打家劫舍的题目,有意思的很,分享给大家。

基础题目

题目内容

198. 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:
输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:
输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
偷窃到的最高金额 = 2 + 9 + 1 = 12 。

提示

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 400

题解

/*
使用动态规划,简单
*/
class Solution {
    public int rob(int[] nums) {
        int n = nums.length;
        if(n==1){
            return nums[0];
        }
        // f[i]表示进入第i个门能偷取到的最大金额
        int[] f = new int[n];
        f[0]=nums[0];

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

进阶题目

213. 打家劫舍 II
在上一题的基础上,加了个条件 这些房子首尾相连 ,这就涉及到第一个房子选与不选的问题,给f数组加一个维度,来表示第一个房子是否选择。

class Solution {
   public int rob(int[] nums) {
       int n = nums.length;
       if(n==1 ){
           return nums[0];
       }else if (n==2){
           return Math.max(nums[0],nums[1]);
       }
       // f[i][0]表示进入第1个门时,进入第i个门能偷取到的金额
       // f[i][1]表示不进入第1个门时,进入第i个门能偷取到的金额
       int[][] f = new int[n][2];
       f[0][0]=0;
       f[0][1]=nums[0];

       f[1][0]=nums[1];
       f[1][1]=nums[0];

       for(int i = 2;i<n;i++){
           for(int j = 0;j<=1;j++){
               if(i==n-1 && j==1){
                   // 最后一个元素取了,第一个元素没取
                   f[i][j]=f[i-1][j];
               }else{
                   // 其他情况,非环形处理
                   f[i][j]=Math.max(f[i-2][j]+nums[i],f[i-1][j]);  
               }
           }
       }
       return Math.max(f[n-1][0],f[n-1][1]);
   }
}

更多内容

  • 博客 https://jhacker.cn/
  • 微信公众号 codeCraft编程工艺

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

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

相关文章

Navicat 携手华为云 GaussDB,联合打造便捷高效的数据库开发和建模工具方案

近日&#xff0c; Navicat Premium 顺利完成与华为云 GaussDB的兼容性测试认证&#xff0c;并获得华为云授予的技术认证书。 ​ 合作 Navicat 作为华为云 GaussDB 生态工具合作伙伴以及 Gocloud 合作伙伴&#xff0c;此次合作旨在通过Navicat 多年来在数据库开发管理工具上的积…

uniapp 下拉框数据回显的问题

问题 : 现在是下拉框数据回显不了, 绑定的v-model 原因 : uniui 下拉框数据绑定要是 value text 这种格式的 解决办法: 将获取到的后端数据 转换为 需要的格式 ,再进行绑定 下拉框的数据 遍历

08.SCA-CNN

目录 前言泛读摘要IntroductionRelated Work 精读Spatial and Channel-wise Attention CNNOverviewSpatial AttentionChannel-wise AttentionChannel-SpatialSpatial-Channel ExperimentsDataset and Metric设置 评估Channel-wise Attention&#xff08;问题1&#xff09;评估M…

VBA实现语料或术语表奇偶行分列和双列合一

一、问题的提出 日常的双语语料处理或者术语格式转化过程中经常要用到下面的操作&#xff1a; 1.在Excel中把一列双行即上下对照的形式改为左右对照。如下图所示&#xff0c;把A转化为B这种样式。 2. 把B这种左右对归照转化为A这种上下对照样式。 二、问题的解决 这个问题看…

腾讯汤道生:超千亿参数 超2万亿tokens 腾讯混元大模型向行业全面开放

9月7日&#xff0c;2023腾讯全球数字生态大会在深圳宝安举行。腾讯集团高级执行副总裁、云与智慧产业事业群CEO汤道生表示&#xff0c;腾讯将迈入“全面拥抱大模型”时代&#xff1a;“以大模型生成技术为核心&#xff0c;人工智能正在成为下一轮数字化发展的关键动力&#xff…

修改this.$notify通知的样式

注意&#xff1a;样式要写在全局里&#xff0c;不能写在scoped里

SAP MM学习笔记28- 供给元(供货源)决定

前面已经努力的学习了 购买发注&#xff0c;入库&#xff0c;请求书照合 等功能&#xff0c;还是蛮多内容的哈。 剩下的功能&#xff0c;比如 右侧的 所要量决定&#xff0c;供给元决定&#xff0c;仕入先选择 还没学。 从这章开始&#xff0c;要开始学习它们了。 上一章学了…

从零开始搭建vite4.0-vue3.0项目

目录 前言 项目地址 项目初始化 git初始化 别名配置 解决vscode报错 vue-router安装 pinia安装 环境配置 axios安装 element-plus按需引入 eslint与prettier安装 scss安装 stylelint配置 代码提交规范配置 husky与lint-stage配置 前言 pnpm和npm的命令行完全一…

Ae 效果:CC Radial Blur、CC Radial Fast Blur

模糊和锐化/CC Radial Blur Blur & Sharpen/CC Radial Blur CC Radial Blur&#xff08;CC 径向模糊&#xff09;可以创建径向缩放以及径向旋转等模糊效果。 ◆ ◆ ◆ 效果属性说明 Type 类型 径向模糊的类型包括两大类&#xff1a;前三个属于径向缩放模糊&#xff0c;后…

Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的Kubernetes集群环境

【原文链接】Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的Kubernetes集群环境 文章目录 一、虚拟机环境准备1.1 准备三台CentOS操作系统的虚拟机1.2 修改主机名1.3 确认CentOS的版本符合要求1.4 配置地址解析1.5 配置时间同步1.6 关闭防火墙1.7 禁用se…

【用unity实现100个游戏之9】使用Unity制作类八方旅人、饥荒风格的俯视角2.5D游戏

前言 2.5D游戏 是一种介于二维和三维之间的游戏形式。它通常在二维平面上展示游戏内容&#xff0c;但利用三维技术来实现更加逼真的图像效果。 在2.5D游戏中&#xff0c;角色和环境通常是以平面的形式呈现&#xff0c;但可以在垂直方向上移动。这意味着玩家可以在一个相对较薄…

Vert.x 源码解析(4.x)——ClusteredEventBus入门使用和源码解析

目录 1. 简介 如果哪里有错误&#xff0c;欢迎指正。 如果哪里有不明白的地方&#xff0c;欢迎讨论 Vert.x集群器 Vert.x 集群管理器的可插拔性&#xff0c;可轻易切换至其它的集群管理器。 Vert.x 集群管理器包含以下几项功能&#xff1a; 发现并管理集群中的节点管理集…

node.js下载安装使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

WangEditor在Vue前端的应用

1、在Vue项目中安装WangEditor 对于Vue2&#xff1a; npm install wangeditor/editor-for-vue --save 或者 yarn add wangeditor/editor-for-vue 对于Vue3&#xff1a; npm install wangeditor/editor-for-vuenext --save 或者 yarn add wangeditor/editor-for-vuenext 2、将Wa…

站在AI大模型十字路口:实地探访2023服贸会

服贸会恰是一面镜子。小到针对蓝领市场的刷脸招聘机器&#xff0c;大到向政企展示的生活服务数据监测平台&#xff0c;无一不在折射出&#xff0c;中国的数字化服务已渗透到个人生活与企业管理的方方面面。 作者|思杭 出品|产业家 处暑过后的北京&#xff0c;仍留着夏天些…

DevEco Studio开发工具无法预览的问题处理

预览如上图报错信息 解决办法&#xff1a; 1. 首先打开 "SDK管理" 下载后即可解决

Docker使用及本地Yolov5打包教程

1. Docker的安装 注意&#xff1a;官方也提供了直接Pull Yolov5的渠道&#xff1a; docker pull ultralytics/yolov5 详见&#xff1a;https://hub.docker.com/r/ultralytics/yolov5 --------------------------------------------------以下正文------------------------…

QT之形态学操作

形态学操作包含以下操作&#xff1a; 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作&#xff0c;其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

ABAP 一般采购申请创建、服务类型采购申请创建BAPI_REQUISITION_CREATE

前言 此文的示例同时可创建一般采购申请或服务采购申请&#xff0c;当采购类型为Z007时&#xff0c;触发服务采购申请相关字段填写 正文 创建服务类型采购申请的时候参数间互相绑定很绕&#xff0c;看了这篇博客才理明白&#xff0c;有兴趣的可以阅读原文 https://wiki.scn.…

Stable Diffusion插件:StyleSelectorXL 之七十七种绘画风格任君选择

本文给大家分享一个应用于 SDXL 的新插件&#xff1a;StyleSelectorXL。通过在UI界面上简单的选择&#xff0c;我们就可以生成多种多样的风格图片&#xff0c;如动漫、水彩、平面、3D、线稿、涂鸦、剪纸、朋克、童话等等。 基本介绍 用过 SDXL 的同学&#xff0c;应该能切身感…