【动态规划】Leetcode编程题解:198. House Robber Add to List

来源:互联网 发布:linux git clone 路径 编辑:程序博客网 时间:2024/06/05 16:43
题目:

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected andit will automatically contact the police if two adjacent houses were broken into on the same night.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonightwithout alerting the police.

这道题目是很符合动态规划的定义,主要是比较到到第n-2所房子所抢劫金额加上第n所房子的金额与到第n-1所房子所抢劫的金额之间的大小关系。
代码如下:
解法一:
class Solution {public:    int rob(vector<int> nums) {        int len = nums.size();        if(len == 0) return 0;        if(len == 1) return nums[0];        else {                vector<int> maxv;                maxv.push_back(nums[0]);                maxv.push_back(max(nums[0], nums[1]));                for(int i = 2; i < len; i++) {                maxv.push_back(max(maxv[i - 2] + nums[i], maxv[i - 1]));            }               return maxv[len - 1];        }    }};
解法二:
class Solution {public:    int rob(vector<int> nums) {        int len = nums.size(), a = 0, b = 0;        for(int i = 0; i < len; i++) {            if(i % 2 == 1) {                a += nums[i];                a = max(a, b);            }            else {                b += nums[i];                b = max(a, b);            }        }        return max(a, b);    }};


0 0