当前位置: 首页 > article >正文

LeetCode:198.打家劫舍

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode: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 。

  • dp[i]表示从0-i包括i内的房间最多可以偷的金额为dp[i]
  • 初始化:dp[0] = nums[0], dp[1] = Math.max(nums[0], nums[1])
  • 递推公式:dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);,即考虑当前i房间偷或者不偷
	public int rob(int[] nums) {
        if (nums.length == 1)
            return nums[0];
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        dp[1] = Math.max(nums[0], nums[1]);
        for (int i = 2; i < nums.length; i++) {
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
        }

        return dp[nums.length - 1];
    }

http://www.kler.cn/a/530298.html

相关文章:

  • 基于最近邻数据进行分类
  • 沙皮狗为什么禁养?
  • 探索 Copilot:开启智能助手新时代
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.5 高级索引应用:图像处理中的区域提取
  • MySQL基础-多表查询
  • 利用Spring Batch简化企业级批处理应用开发
  • Compose笔记(二)--LaunchedEffect
  • AMD简单读书笔记2
  • 【人工智能】深入探索Python中的自注意力机制:实现Transformer的核心组件
  • 035 搜索之DFS基础
  • 鬼泣目录.
  • 【博弈论】Chapter2 重复严格优势/可理性化和相关均衡
  • JVM篇:对象的深度剖析
  • 一种非接触式智能垃圾桶设计(论文+源码+实物)
  • 【仿12306项目】通过加“锁”,解决高并发抢票的超卖问题
  • BUUCTF_[网鼎杯 2020 朱雀组]phpweb(反序列化绕过命令)
  • 11 3D变换模块(transform3d.rs)
  • DeepSeek算是真正意义上的大模型开源吗?
  • 【大模型专栏—基础篇】提示词设计
  • 像接口契约文档 这种工件,在需求 分析 设计 工作流里面 属于哪一个工作流
  • Shadow DOM举例
  • MySQL5.5升级到MySQL5.7
  • Vue3.0实战:大数据平台可视化(附完整项目源码)
  • Alibaba开发规范_编程规约之集合框架:最佳实践与常见陷阱
  • MBTI之INFJ型人格解读,INFJ的职业倾向、人际关系和INFJ的心理健康
  • doris:主键模型的导入更新