方法一(DP)
实现思路
实现代码
class Solution {
public:
int rob(vector<int>& nums) {
if(!nums.size()) return 0;
if(nums.size()==1) return nums[0];
vector<int> dp(nums.size()+1,0);
dp[1]=nums[0];
dp[2]=max(nums[0],nums[1]);
for(int i=3;i<=nums.size();i++){
dp[i]=max(dp[i-2]+nums[i-1],dp[i-1]);
}
return dp[nums.size()];
}
};
提交结果及分析
时间复杂度O(n)
总结
DP题类型比较多有数组上的,树上的还有字符串上的,但是最常考的还是数组上的DP题
想到使用DP题目的是时候,有些题目一看就是暴力枚举,但实际枚举的时间复杂度可能到了O(2^n)的时间复杂度的时候就可以想象使用DP求解
有时发现贪心算法不能求解的时候,也可以考虑使用动态规划来求解