LeetCode 198. 打家劫舍(动态规划)

LeetCode 198. 打家劫舍

  • 原题
  • 思路
  • 代码
  • 运行截图
  • 收获

原题

LeetCode 198. 打家劫舍

思路

  • 从头开始遍历,用一个dp[n][2]的数组来记录遍历到当前房屋时能够偷窃到的最高金额。
  • dp[i][0]代表不偷第i间房屋能够获得的最高金额,即dp[i-1][0],dp[i-1][1]中最大的那一个。
  • dp[i][1]代表偷第i间房屋能够获得的最高金额,那么肯定为第i-1间房屋不能偷获取到的最高金额+第i间房屋的金额,即dp[i-1][0] + nums[i]。
  • 最后能偷到的最大的金额就是dp[n-1][0]和dp[n-1][1]中最大的那一个。

代码

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        int dp[n][2];
        dp[0][0] = 0;
        dp[0][1] = nums[0];
        for (int i = 1; i < n; i++) {
            dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
            dp[i][1] = dp[i-1][0] + nums[i];
        }
        return max(dp[n-1][0], dp[n-1][1]);
    }
};

运行截图

LeetCode 198. 打家劫舍(动态规划)_第1张图片

收获

你可能感兴趣的:(leetcode,动态规划,算法)