码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 40-设计问题-最小栈


    原题链接:

    198. 打家劫舍

    题目描述:

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

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

    数据范围: 

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

    测试样例:

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

    思路:二维动态规划

    对于每一家而言,都有 偷了 和 没偷 这两种状态,所以可以用一个二维 dp 数组(共 2 行 n 列)来表示某一家是否被偷。顺序遍历原数组,模拟小偷从第一家偷到最后一家的过程。那么有 dp[0][i] 表示小偷走到索引为 i 的那一家,但是没偷他们家时获得的最大金额;相应的 dp[1][i] 表示小偷走到索引为 i 的那一家,并且偷了他们家时获得的最大金额。因为被偷的两家不能相邻,所以可以得到递推关系:dp[0][i] = max(dp[0][i-1], dp[1][i-1]),因为 dp[0][i] 表示没有偷这一家所以偷没偷前面的一家无所谓,返回二者中的最大值;dp[1][i] = dp[0][i-1] + nums[i],因为 dp[1][i] 表示偷了这一家所以前一家必定不能偷,只能是 dp[0][i-1] 但是又因为偷了当前这个一家收益还要增加 nums[i]。并且可以得到初始值分别为 dp[0][0] = 0 和 dp[1][0] = nums[0]。仔细思考一下发现不重复不遗漏,那么最终的结果就是小偷走到最后一家时的最大收益 max(dp[0][n-1], dp[1][n-1])。

    代码:

    1. class Solution {
    2. public:
    3. int rob(vector<int>& nums) {
    4. int n = nums.size();
    5. int dp[2][n];
    6. dp[0][0] = 0, dp[1][0] = nums[0];
    7. for (int i = 1; i < n; i ++) {
    8. dp[0][i] = max(dp[0][i-1], dp[1][i-1]);
    9. dp[1][i] = dp[0][i-1] + nums[i];
    10. }
    11. return max(dp[0][n-1], dp[1][n-1]);
    12. }
    13. };

    复杂度:

    时间复杂度:

    遍历了一遍整个数组

    时间复杂度为 O(N)

    空间复杂度:

    创建了一个辅助数组存储 dp 结果

    空间复杂度为 O(N)

  • 相关阅读:
    AI视觉应用的4G远程测试
    机器学习笔记 探索性数据分析(EDA) 中的配对图详述
    HTTP代理出现错误是什么原因?如何解决?
    unbuntu下安装gfortran
    利用docker一键部署LLaMa到自己的Linux服务器,有无GPU都行、可以指定GPU数量、支持界面对话和API调用,离线本地化部署包含模型权重合并
    每日练习------定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;
    纸业供应链协同管理系统:重构纸业智慧供应网络,支撑企业数字化转型升级
    AD9371 官方例程HDL详解(一)
    学习Python的第二天
    数据库安全运维是什么意思?数据库安全运维系统用哪家好?
  • 原文地址:https://blog.csdn.net/m0_74457208/article/details/134450062
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号