首页 > 编程语言 >【算法训练营day48】LeetCode198. 打家劫舍 LeetCode213. 打家劫舍II LeetCode337. 打家劫舍III

【算法训练营day48】LeetCode198. 打家劫舍 LeetCode213. 打家劫舍II LeetCode337. 打家劫舍III

时间:2023-02-18 17:35:48浏览次数:65  
标签:nums int II start day48 打家劫舍 dp size

LeetCode198. 打家劫舍

题目链接:198. 打家劫舍

独上高楼,望尽天涯路

dp[i]表示的是偷窃0-i房屋所能获得的最大金额。

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

慕然回首,灯火阑珊处

代码一样,题解的思路更清晰。

决定dp[i]的因素就是第i房间偷还是不偷。

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。

如果不偷第i房间,那么dp[i] = dp[i - 1],即考 虑i-1房,(注意这里是考虑,并不是一定要偷i-1房,这是很多同学容易混淆的点


LeetCode213. 打家劫舍II

题目链接:213. 打家劫舍II

独上高楼,望尽天涯路

感觉算法主体部分还是打家劫舍I的思路。

慕然回首,灯火阑珊处

讨论三种情况,情况一:不包含首尾元素,情况二:不包含首元素,情况三:不包含尾元素。

分析一下可以知道,情况二和情况三包含情况一,这是因为,例如情况三,虽然包含首元素,但是最高金额不一定选首元素,所以只需要考虑情况二和情况三中最大者即可。

class Solution {
public:
    int rob(vector<int>& nums) {
        if (nums.size() == 1) return nums[0];
        if (nums.size() == 2) return max(nums[0], nums[1]);
        int result1 = robRange(nums, 0, nums.size() - 2); // 情况三
        int result2 = robRange(nums, 1, nums.size() - 1); // 情况二
        return max(result1, result2);
    }
    // 和打家劫舍的思路一样
    int robRange(vector<int>& nums, int start, int end) {
        vector<int> dp(nums.size());
        dp[start] = nums[start];
        dp[start + 1] = max(nums[start], nums[start + 1]);
        for (int i = start + 2; i <= end; i++) {
            dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
        }
        return dp[end];
    }
};

LeetCode337. 打家劫舍III

题目链接:337. 打家劫舍III

独上高楼,望尽天涯路

树有点生疏了,挖个坑,等二刷把树复习了再来看这道题。

慕然回首,灯火阑珊处

标签:nums,int,II,start,day48,打家劫舍,dp,size
From: https://www.cnblogs.com/BarcelonaTong/p/17133122.html

相关文章

  • Quartus II 8.0在实际上板时无法连接USB-Blaster的解决方法
    最新修改日期:2023/02/18软件:QuartusII8.0电脑系统:Win10/Win11电路板连接方式:USB-Blaster线实际上板时会提示没有USB-Blaster接上,安装驱动也不行。究其原因,是JTAGs......
  • 配置项(Configuration)-Yii 约定-(2.5)深入理解YII2.0
    配置项(Configuration)说到配置项,读者朋友们第一反应是不是Yii的配置文件?这是一段配置文件的代码:return['id'=>'app-frontend','basePath'=>dirname(__DIR__)......
  • 属性-Yii 基础-深入理解YII2.0(1.1)
    属性(Property)属性用于表征类的状态,从访问的形式上看,属性与成员变量没有区别。你能一眼看出​​$object->foo​​中的foo是成员变量还是属性么?显然不行。但是,成员变......
  • 目录结构-Yii 约定-深入理解YII2.0(2.1)
    Yii应用的目录结构和入口脚本以下是一个通过高级模版安装后典型的Yii应用的目录结构:.├──backend├──common├──console├──environments├──frontend├──......
  • Yii2中限制访问某控制器的IP(IP白名单)
    有关Yii2.0鉴权之访问控制过滤器参考这篇文章 http://www.yiiframework.com/doc-2.0/guide-security-authorization.html这里主要说下怎么在控制器中限制访问的IP:useyiiw......
  • yii2 中 linslin\Curl的基本使用
     yii2中linslin\Curl的基本使用一、get请求:1.1简单get请求uselinslin\yii2\curl;$curl=newcurl\Curl();//gethttp://example.com/get请求改网址$response=$curl......
  • 算法刷题-Excel表列序号、单词拆分 II、排序链表
    Excel表列序号(数学、字符串)给你一个字符串columnTitle,表示Excel表格中的列名称。返回该列名称对应的列序号。例如,A->1B->2C->3...Z->26AA->27AB->......
  • .Net Core 部署IIS,最细步骤
    先基本的发布操作:右击web项目的《发布》按钮。选文件配置发布属性部署模式,如果框架依赖部署不行,可以尝试:独立服务器安装环境对应的.NETCoreServer环境:安......
  • [oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络
    编码进化回忆上次内容上次回顾了字符编码的进化过程IBM在数字化过程中作用非常大IBM的BCDIC有黑历史......
  • 标准ASCII编码表
    ASCII(AmericanStandardCodeforInformationInterchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代美式英语,并等同于国际标准ISO/IEC646......