Leetcode NO.198 House Robber 打家劫舍

C++解决爬楼梯问题 假设你正在爬楼梯,需要n阶你才能到达楼顶,每次你可以爬1或2个台阶,你有多少种方法可以爬到楼顶? 阅读详情

1.问题描述

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

2.测试用例

示例 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 。

3.提示

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

4.代码

1.动态规划
code
/**
     * 动态规划
     * 构造dp[n]
     * 从最后往前选择
     * 对于n有两种选择,选中或者不选中
     * 选中 dp[n-2] + nums[i] 就是最优
     * 不选中 dp[n-1]  就是最优
     * 因此状态转移方程  dp[i] = max(dp[n-2] + nums[i] , dp[n-1])
     *
     * @param nums nums
     * @return 最大金额
     */
public int robWithDp(int[] nums) {
    if (nums == null) {
        return 0;
    }
    int l = nums.length;
    int[] dp = new int[l + 1];
    dp[0] = 0;
    dp[1] = nums[0];
    for (int i = 2; i <= l; i++) {
        dp[i] = Math.max(dp[i - 2] + nums[i - 1], dp[i - 1]);
    }

    return dp[l];
}
复杂度
时间复杂度 O(n)
空间复杂度 O(n)
2.动态规划空间优化
code
public int robWithDpOptSpace(int[] nums) {
        if (nums == null) {
            return 0;
        }
        int l = nums.length;
        int p1 = 0;
        int p2 = nums[0];
        int tmp;
        for (int i = 1; i < l; i++) {
            tmp = p2;
            p2 = Math.max(p1 + nums[i], p2);
            p1 = tmp;
        }

        return p2;
}
复杂度
时间复杂度 O(n)
空间复杂度 O(1)
【C++题解】走楼梯问题综合 楼梯有$N$级台阶,上楼可以一步上一阶,也可以一步上二阶。编写程序,计算**共有多少种不同走法**?正在准备体育考试,他为跳远感到忧愁。[$wgy$](https://blog.csdn.net/wgy_123456)建议他每天跳$N$级台阶,锻炼爆发力。为了增加“**娇喘**”之力,$why$给自己制定了一项规则:$tywz$的同学都是具有拼搏精神和团队精神的,通过不断的努力,$why$进入了$tywz$信竞团队,在知行楼$5$楼有一个神秘宝座,要到达宝座需要爬数级台阶 阅读详情

相关推荐

House Robber(打家劫舍问题)

待补充

肉丸不肉 717

Python每日一练-----打家劫舍

⛅(day13) 🖍题目: 假设你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组nums,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。(1 <= nums.length <= 100) 🌠示例 1: 输入:[1,2,3,1]输出:4原由:偷窃 1 号房屋 (金额 = 1) ,然后偷窃

m0_61791601的博客 2616

状态机图习题.docx

状态机图习题

C++打家劫舍问题

总结成一句话就是:走到一间屋要考虑偷还是不偷? 首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则由于两间房屋相邻,不能同时偷窃,只能偷窃其中的一间房屋,因此选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。 如果房屋数量大于两间,应该如何计算能够偷窃到的最高总金额呢?对于第 k~(k>2) 间房屋,有两个选项: 1.偷窃第 k 间房屋,那么就不能偷窃第 k-1 间房屋,偷窃总金额为前 k-2 间房屋的最高总金额与第 k 间房屋的金额之和。 2. 不.

qq_41884662的博客 2049

手把手教你用CH340给正点原子ESP8266烧录固件(附串口调试技巧)

本文详细讲解了使用CH340模块为正点原子ESP8266烧录AT固件的完整流程与关键技巧。核心在于烧录时必须使用3.3V供电,并正确连接GPIO0引脚至GND以进入下载模式。文章涵盖了从硬件接线、软件参数配置到烧录后串口调试验证的全步骤,并提供了常见问题排查方案,帮助开发者一次性成功完成固件烧录。

weixin_29201933的博客 232

comsol 多物理场仿真流程-以开关柜为例

1、主要方法 在SolidWorks中对于开关柜的内部与外部结构进行建模,生成能够导入软件计算的3D模型。将SolidWorks中的模型导入comsol软件中,设置参数进行多物理场耦合仿真。 1、具体步骤 删除高压开关柜中对其内部电磁环境无较大影响的结构,如低压测量柜、断路器内部结构等。 导入模型:将厂家提供的3D模型转化为solidworks结构模型。 修复模型:修复已转化模型中转化错误的部分、修复已转化模型中非实体部分、修复已转化模型中重叠实体部分 化简模型:去除过于...

健忘16的博客 7020

python Solution LeetCode No.198 house-robber(打家劫舍)

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [1,2,3,1] 输出: 4 解释: 偷窃 1 号房屋 (金额 = 1) ...

一梦如是的博客 267

西电微机系统课程设计步进电机开环控制系统

** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一、程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50...

qq_37015775的博客 4038

LeetCode 198. House Robber 题解

本题是动态规划的经典问题,主要考察对状态定义和状态转移方程的理解。通过动态规划,我们可以高效地计算出不触动警报装置的情况下能够偷窃到的最高金额。动态规划的核心思想是:通过填充一个一维数组,记录前i个房屋能偷窃到的最高金额。对于每个房屋,我们有两种选择:不偷它或者偷它,选择其中金额较大的那个。空间优化的方法通过使用两个变量来存储前两个状态,进一步降低了空间复杂度,使算法更加高效。这种方法不仅适用于打家劫舍问题,还可以应用于许多其他需要动态规划解决的问题,例如最大子数组和、最长递增子序列等。

cannonjinx的博客 4104

模拟波束赋形 vs 数字波束赋形:5G天线设计中的成本与性能权衡

本文深入剖析了5G天线设计中模拟波束赋形与数字波束赋形的核心差异,重点探讨了二者在硬件成本、功耗、网络覆盖能力和频谱效率等方面的权衡。文章指出,模拟方案成本低但灵活性有限,数字方案性能强大但代价高昂,而混合波束赋形已成为主流折中方案。决策需紧密结合具体的部署场景、性能要求和总拥有成本进行综合考量。

weixin_28432777的博客 840

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

leetcode 198.House Robber-打家劫舍|动态规划

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent house

hdtopku 2832

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2026

LeetCode - 198 - 打家劫舍(house-robber)

Create by jsliang on 2019-07-08 19:12:26Recently revised in 2019-7-8 22:06:01一 目录不折腾的...

weixin_41806099的博客 735

创建 Qt Quick 项目

来看看如何使用 Qt Creator 创建 Qt Quick 项目!

青春不老,奋斗不止! 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 198. House Robber 打家劫舍

LeetCode 198. House Robber 打家劫舍198. House Robber题目描述示例:解答代码 198. House Robber 题目描述 You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed...

importsys的博客 311

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

House Robber Leetcode 198,213,337

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

qq_36835991的博客 420

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

leetcode198打家劫舍

dp[i] 的值取决于是否选择偷窃当前的房屋 i,以及偷窃之前房屋的情况。递推公式 dp[i] = max(dp[i-1], dp[i-2] + nums[i]) 就是基于这两种选择所能获得的最大金额计算出来的。最终,dp[n-1] 就是小偷在 n 间房屋内所能获得的最大金额。动态规划(Dynamic Programming,简称 DP)是一种算法设计技巧,用于解决具有重叠子问题和最优子结构性质的问题。它的核心思想是通过将问题分解为更小的子问题,逐步求解并保存这些子问题的解,从而构建出原问题的解。

weixin_43683432的博客 1241

【leetcode】198. 打家劫舍( House Robber )

题目描述 【leetcode】198. 打家劫舍( House Robber ) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 第一次解答 思路: 经...

Liber-coder的博客 211

LeetCode—198.打家劫舍(House Robber)——分析及代码(C++)

LeetCode—198.打家劫舍[House Robber]——分析及代码[C++] 一、题目 二、分析及代码 1. 动态规划(写法一) (1)思路 (2)代码 (3)结果 2. 动态规划(写法二) (1)思路 (2)代码 (3)结果 三、其他 一、题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置

江南土豆的博客 533

Leetcode198. House Robber-动态规划-打家劫舍系列1

Leetcode198. House RobberLeetcode198. House Robber题目思路复杂度代码O(1)空间复杂度\mathcal{O}(1)空间复杂度O(1)空间复杂度O(n)空间复杂度(常规解法,保留DP数组)\mathcal{O}(n)空间复杂度(常规解法,保留DP数组)O(n)空间复杂度(常规解法,保留DP数组) Leetcode198. House Robber Leetcode打家劫舍系列现在有3道题,主要区别在房屋分布的几何结构不一样,导致遍历时用的方式不同,核心都是动态

qq_17065591的博客 468

【LeetCode】198. House Robber 打家劫舍(Easy)(JAVA)

【LeetCode】198. House Robber 打家劫舍(Easy)(JAVA) 题目地址: https://leetcode.com/problems/house-robber/ 题目描述: You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you fro

qq_16927853的博客 243
上一篇: Leetcode NO.1143 Longest Common Subsequence 最长公共子序列
下一篇: 发票查验平台 https://inv-veri.chinatax.gov.cn 您的连接不是私密连接,不能访问问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值