力扣---打家劫舍---动态规划

思路 1:

我将res[i]定义为:一定要取第 i 个房子的前提下,能获取的最大金额。那么直接用cnt从头记录到尾,每个房子的res最大值即是答案。那么递推公式是什么?res[i]=max(res[i-2],res[i-1],...,res[0])+nums[i]。数组初始化是什么?res[i]=nums[i],也就是只取每个房子的金额。

代码:

C++:

class Solution {
public:
    int rob(vector<int>& nums) {
        int len=nums.size();
        int cnt=0;
        vector<int> res(len,0);  //以该房子为结尾,偷盗的最大金额
        //那如果res[i]定义为截止到房子i为止,能获取的最大金额呢?
        //初始化res
        for(int i=0;i<len;i++){
            res[i]=nums[i];
            cnt=max(cnt,res[i]);
        }
        
        for(int i=0;i<len;i++){
            for(int j=0;j<=i-2;j++){
                res[i]=max(res[i],res[j]+nums[i]);
                cnt=max(cnt,res[i]);
            }
        }
        return cnt;
    }
};

Python:

class Solution:
    def rob(self, nums: List[int]) -> int:
        len_nums=len(nums)
        cnt=0
        res=[0]*len_nums
        for i in range(len_nums):
            res[i]=nums[i]
            cnt=max(cnt,res[i])
        for i in range(len_nums):
            for j in range(i-1):
                res[i]=max(res[i],res[j]+nums[i])
                cnt=max(cnt,res[i])

        return cnt

那如果res[i]定义为偷前 i 个房子,能获取的最大金额呢?递推公式是什么呢?数组初始化又是什么呢?

思路2

递推公式为:g[i]=max(g[i-1],g[i-2]+nums[i])

可以看一下标答,还是很清晰的:198. 打家劫舍 - 力扣(LeetCode)

数组初始化:

要考虑len(nums)=1的情况哦,别掉进坑了

g[0]=nums[0],g[1]=max(nums[0],nums[1])

代码:

C++:

class Solution {
public:
    int rob(vector<int>& nums) {
        int len=nums.size();
        if(len==1){return nums[0];}
        vector<int> g(len,0);
        g[0]=nums[0];
        g[1]=max(nums[0],nums[1]);
        for(int i=2;i<len;i++){
            g[i]=max(g[i-1],g[i-2]+nums[i]);
        }
        return g[len-1];
    }
};

Python:

class Solution:
    def rob(self, nums: List[int]) -> int:
        len_nums=len(nums)
        if len_nums==1:
            return nums[0]
        g=[0]*len_nums
        g[0]=nums[0]
        g[1]=max(nums[0],nums[1])
        for i in range(2,len_nums):
            g[i]=max(g[i-1],g[i-2]+nums[i])
        return g[len_nums-1]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cmake与交叉编译(x86 to arm)过程和问题全记录

一、背景 公司维护一批c动态库&#xff0c;由于生产需要&#xff0c;每次更新都要在windows、linux_x86、kylin_arm等多个环境中编译一遍&#xff0c;操作比较麻烦&#xff0c;所以想通过交叉编译的方式在一台机器上边编译多个环境的动态库&#xff0c;减少工作量。考虑到工作…

浅谈大模型“幻觉”问题

大模型的幻觉大概来源于算法对于数据处理的混乱&#xff0c;它不像人类一样可以by the book&#xff0c;它没有一个权威的对照数据源。 什么是大模型幻觉 大模型的幻觉&#xff08;Hallucination&#xff09;是指当人工智能模型生成的内容与提供的源内容不符或没有意义的现象。…

Linux——程序地址空间

我们先来看这样一段代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int g_val 0;int main() {pid_t id fork();if(id < 0){perror("fork");return 0;}else if(id 0){ //child,子进程肯定先跑完&#xff0c;也…

提升Java编程安全性-代码加密混淆工具的重要性和应用

在Java编程领域中&#xff0c;保护代码安全性和知识产权至关重要。本文旨在探讨代码加密混淆工具在提升代码安全性和保护知识产权方面的重要性。我们将介绍几款流行的Java代码加密混淆工具&#xff0c;如ProGuard、DexGuard、Jscrambler、DashO和ipaguard&#xff0c;并分析它们…

多线程(剩余部分)

Day29 多线程(剩余部分) 十二、线程的礼让 Thread.yield(); 理解&#xff1a;此方法为静态方法&#xff0c;此方法写在哪个线程中&#xff0c;哪个线程就礼让 注意&#xff1a;所谓的礼让是指当前线程退出CPU资源&#xff0c;并转到就绪状态&#xff0c;接着再抢 需求&#x…

浅谈一下对于DDD模式的理解3

浅谈一下对于DDD模式的理解&#xff0c;相互学习交流&#xff0c;不对之处欢迎大家指正。 在说到DDD(Domain-Driven Design)设计模式之前&#xff0c;先要说下我们在对系统进行架构设时需要遵循的几个原则&#xff1a; 单一职责&#xff08;SRP&#xff09; "单一职责原则…

直播预约丨《袋鼠云大数据实操指南》No.1:从理论到实践,离线开发全流程解析

近年来&#xff0c;新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮&#xff0c;持续冲击并革新着企业数字化转型的观念视野&#xff0c;昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念&#xff0c;为了更好地服务于客户…

文献速递:基于SAM的医学图像分割---阶梯式微调方法,用于整合补充网络的自适应矩估计(SAM)

Title 题目 Ladder Fine-tuning approach for SAM integrating complementary network 阶梯式微调方法&#xff0c;用于整合补充网络的自适应矩估计&#xff08;SAM&#xff09; 01 文献速递介绍 医学图像分割在医疗保健中扮演着至关重要的角色。它旨在使用各种医学成像方式…

MS2574/2574T/2574S高速、四通道差动线路驱动器

品简述 MS2574/MS2574T/MS2574S 是一款高速、低功耗的四通道 差动线路驱动芯片&#xff0c;用于平衡或非平衡的数字数据传输。可 以满足 ANSI TIA/EIA-422-B 和 ITU &#xff08;原 CCITT &#xff09;建议 V.11 的要求。 三态输出可提供用于驱动双绞线或平行双线传输线路等…

公司购买阿里云服务器多少钱一年?199元2核4G5M配置

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

基于机器视觉的太阳能电池片异物遮挡检测含数据集

分享链接见文末 近年来&#xff0c;随着太阳能发电技术的快速发展&#xff0c;太阳能电池片的应用越来越广泛。然而&#xff0c;太阳能电池片在实际运行过程中常常会受到各种异物的遮挡&#xff0c;如树叶、灰尘等&#xff0c;导致发电效率下降甚至损坏设备。因此&#xff0c;…

python 基于 websocket 的简单将视频推流到网页

本来有一台设备是要搞成无线的形式的&#xff0c;设备的摄像头的数据可以在一台局域网连接的平板上查看&#xff0c;因为试着使用 RTMP 推流&#xff0c;感觉延时太大了&#xff0c;而 Webrtc 感觉有太麻烦了&#xff0c;所以一开始看到这篇文章使用 UDP 协议进行推流&#xff…

竞赛 - 基于机器视觉的图像拼接算法

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…

“比特币跌至8900美元”?逢低买入信号闪现!亚洲投资者需求正持续增长!

3月19日&#xff0c;美股三大指数集体收涨&#xff0c;美联储正在召开为期两天的货币政策会议&#xff0c;周三公布结果&#xff0c;市场普遍预计美联储将按兵不动。 然而&#xff0c;比特币近几日却面临显著的价格回调&#xff0c;昨早再次从6.7万美元水平快速下滑&#xff0c…

学习vue3第九节(新加指令 v-pre/v-once/v-memo/v-cloak )

1、v-pre 作用&#xff1a;防止编译器解析某个特定的元素及其内容&#xff0c;即v-pre 会跳过当前元素以及其子元素的vue语法解析&#xff0c;并将其保持原样输出&#xff1b; 用于&#xff1a;vue 中一些没有指令和插值表达式的节点的元素&#xff0c;使用 v-pre 可以提高 Vu…

【Linux】shell命令运行原理---认识Linux基本指令

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.shell命令以及运行原理 1.1 shell命令 1.2 Linux内核权限 1.3 图示Linux shell和bash的区别 2.认识Linux基本指令 2.1 指令的…

选马桶别再犯错,这7点要注意!福州中宅装饰,福州装修

在众多卫浴品牌中&#xff0c;各种型号尺寸和性能的马桶更是层出不穷&#xff0c;在选购的时候总是陷入难题&#xff0c;那么接下来就给大家讲讲马桶应该怎么选购&#xff1a; ①高效冲水系统&#xff1a;高效的冲水系统&#xff0c;不仅能确保每一次冲洗都干净彻底&#xff0c…

【RabbitMQ】【Docker】基于docker-compose构建rabbitmq容器

本文通过docker-compose构建一个单体的rabbtimq容器。 1&#xff0c;docker、docker-compose环境 首先需要有docker和docker-compose环境&#xff0c;docker安装[1]&#xff0c;docker-compose安装[2]。 通过下列命令确定docker、docker-compose是否安装成功。 [root192 ge…

春暖花开,一起来看看2024年品牌春分海报吧!

春分&#xff08;Vernal equinox&#xff09;已至&#xff0c;春花烂漫、燕子归来、百草回芽。 今天我们要分享的是2024年品牌发布的春分节气海报合集&#xff0c;快来随我们一起感受这昂扬、蓬勃的春意吧! &#xff08;1&#xff09;泸州老窖 &#xff08;2&#xff09;BD…

语义分割基础知识

1、什么是语义分割 目标检测&#xff1a; 检测出图像中目标位置和类别&#xff0c;使用锚框框出目标位置 实例分割&#xff1a; 将前景物体分割开来&#xff0c;并且每一个物体有不同的id&#xff08;颜色&#xff09; 语义分割&#xff1a; 和实例分割相似&#xff0c;但…