博客
关于我
LeetCode题解【打家劫舍】(中等难度)
阅读量:790 次
发布时间:2023-01-31

本文共 1068 字,大约阅读时间需要 3 分钟。

为了解决这个问题,我们需要找到一种方法,能够在一夜内偷窃到的最高金额,而不触动相邻房屋的警报系统。

方法思路

这个问题类似于经典的动态规划问题,可以使用动态规划的方法来解决。我们可以定义一个数组 dp,其中 dp[i] 表示到第 i 个房屋时能够偷到的最多金额。状态转移方程如下:

  • 如果我们不偷第 i 个房屋,那么 dp[i] 就等于 dp[i-1]
  • 如果我们偷第 i 个房屋,那么我们不能偷第 i-1 个房屋,这时 dp[i] 等于 dp[i-2] 加上当前房屋的金额。

状态转移方程可以表示为:[ dp[i] = \max(dp[i-1], dp[i-2] + nums[i]) ]

初始化时:

  • 当数组长度为 1 时,只能偷第一个房屋,即 dp[0] = nums[0]
  • 当数组长度为 2 时,只能选择偷前两栋房子的其中一栋,取较大的那个。

解决代码

class Solution {    public int rob(int[] nums) {        if (nums == null || nums.length == 0) {            return 0;        }        int n = nums.length;        if (n == 1) {            return nums[0];        }        int[] dp = new int[n];        dp[0] = nums[0];        dp[1] = Math.max(nums[0], nums[1]);        for (int i = 2; i < n; i++) {            dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);        }        return dp[n - 1];    }}

代码解释

  • 输入检查:首先检查输入数组是否为空,如果为空则返回 0。
  • 边界处理:如果数组长度为 1,直接返回该单个元素的值。
  • 初始化 dp 数组dp[0] 初始化为第一个房屋的金额,dp[1] 初始化为前两个房屋金额的最大值。
  • 填充 dp 数组:从第三个房屋开始,依次计算每个房屋能偷到的最大金额,使用上述的状态转移方程。
  • 返回结果:最后返回 dp 数组的最后一个元素,即整个数组能偷到的最大金额。
  • 这种方法的时间复杂度为 O(n),空间复杂度为 O(n),适用于题目给定的约束条件。

    转载地址:http://frgyk.baihongyu.com/

    你可能感兴趣的文章
    Kubernetes实战(三十三)-外部Etcd集群部署与调优(更安全的数据存储策略)
    查看>>
    Kubernetes实战(三十二)-Kubeadm 安装 Kubernetes v1.24.0
    查看>>
    Kubernetes实战(三)-定向调度(NodeSelector)
    查看>>
    Kubernetes实战(二十九)-集群资源管理(CPU & Memory)
    查看>>
    Kubernetes实战(二十二)-Etcd 集群部署(安全)
    查看>>
    Kubernetes实战(二十五)-Flannel 网络部署(不推荐,不支持 Etcd3)
    查看>>
    Kubernetes实战(二十八)-环境共享与隔离(Namespace)
    查看>>
    Kubernetes实战(十五)-敏感数据管理(Secret)
    查看>>
    Kubernetes对象Service详解
    查看>>
    kubernetes常用工具
    查看>>
    Kubernetes快速上手:部署、使用及核心概念解析
    查看>>
    Kubernetes故障排查与面试汇总
    查看>>
    Kubernetes故障排查实战
    查看>>
    kubernetes的概念介绍_服务发现负载均衡_存储编排_自动部署和回滚_自动完成装箱计算_自我修复_集群的方式_架构原理---分布式云原生部署架构搭建013
    查看>>
    kubernetes社区项目生态概览
    查看>>
    Kubernetes网络插件使用详解
    查看>>
    Kubernetes部署Dashboard实战
    查看>>
    Kubernetes集群升级实战
    查看>>
    KubeSphere核心实战_kubesphere部署redis02_创建redis现指定存储卷_配置外网访问服务---分布式云原生部署架构搭建048
    查看>>
    KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图
    查看>>