[LeetCode]198. House Robber
题目描述
思路
动态规划
维护一个状态数组,保存到目前为止可以拿到的最大价值
空间可优化,迭代更新到目前为止的最优解即可
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int rob(vector<int>& nums) {
/* 空间为o(n)
if (nums.size() == 0)
return 0;
vector<int> dp(nums.size() + 1, 0);
dp[1] = nums[0];
for (int i = 2; i < nums.size() + 1; ++i) {
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i - 1]);
}
return dp[nums.size()];
*/
// 空间优化为o(1)
if (nums.size() == 0)
return 0;
int preMax = 0,
curMax = nums[0];
for (int i = 1; i < nums.size(); ++i) {
int temp = max(curMax, preMax + nums[i]);
preMax = curMax;
curMax = temp;
}
return curMax;
}
};
int main() {
vector<int> nums = { 10, 1, 1, 10 };
Solution s;
cout << s.rob(nums) << endl;
system("pause");
return 0;
}