题目
house-robber/
算法
* DP
* DP优化
代码
* DP
class Solution {
public:
int rob(vector<int> &num) {
if (num.size() <= 1) return num.empty() ? 0 : num[0];
vector<int> dp = {num[0], max(num[0], num[1])};
for (int i = 2; i < num.size(); ++i) {
dp.push_back(max(num[i] + dp[i - 2], dp[i - 1]));
}
return dp.back();
}
};
* DP优化
class Solution {
public:
int rob(vector<int> &num) {
int a = 0, b = 0;
for (int i = 0; i < num.size(); ++i) {
if (i % 2 == 0) {
a += num[i];
a = max(a, b);
} else {
b += num[i];
b = max(a, b);
}
}
return max(a, b);
}
};
* 更优化
class Solution {
public:
int rob(vector<int> &nums) {
int a = 0, b = 0;
for (int i = 0; i < nums.size(); ++i) {
int m = a, n = b;
a = n + nums[i];
b = max(m, n);
}
return max(a, b);
}
};