动态规划之打家劫舍PPT
打家劫舍是一个经典的动态规划问题,通常描述为:你是一个小偷,给定一个代表每个房屋金钱价值的数组,你需要确定偷哪些房屋使得总金额最大,但不能偷相邻的房屋,因...
打家劫舍是一个经典的动态规划问题,通常描述为:你是一个小偷,给定一个代表每个房屋金钱价值的数组,你需要确定偷哪些房屋使得总金额最大,但不能偷相邻的房屋,因为那样会增大被抓的风险。问题分析这个问题可以通过动态规划来解决。首先,我们定义一个数组 dp,其中 dp[i] 表示偷到第 i 个房屋时可以获得的最大金额。由于不能偷相邻的房屋,所以有两种情况:偷第 个房屋那么就不能偷第 个房屋,所以 ,其中 表示第 个房屋的金钱价值不偷第 个房屋那么在这两种情况下,我们选择金额更大的那种。动态规划算法复杂度分析时间复杂度O(n),其中 n 是房屋的数量。我们需要遍历每个房屋一次来计算最大金额空间复杂度O(n),我们需要使用一个大小为 n 的数组 来存储每个房屋的最大金额。但是,我们可以通过只保留前两个状态来优化空间复杂度到 O(1)优化空间复杂度在这个优化版本中,我们只保留了前两个状态 prev_2 和 prev_1,从而将空间复杂度降低到了 O(1)。