dp.clear()会把dp的size变为0。?
assign和insert的对比:
v1.assign(v2.begin(), v2.end());
v1.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
v1.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
vector的assign和insert操作实现坐标正逆序添加_std::vector assign-CSDN博客?
?dp.assign()赋值,会把dp之前的值覆盖。
c++ vector(二) insert, assign_c++ vector assign insert-CSDN博客
我的想法是,在数组最后一个后面加上第一个,仿佛就构成了闭环。欠考虑了:第一个和最后一个只能选择一个。也就是,我的做法可能导致第一个被选择两次。
模板的,分了两种情况:选择第一个、不选择第一个。从而不需要再考虑闭环问题。
模板的疑惑:dp.clear()后不能直接dp[1]=0赋值吧?clear后数组size为0,需要用insert或者push_back。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int rob(vector<int>& nums) {
// write code here
int n = nums.size();
int res = 0;
//选择第一个,一定不能选择最后一个
vector<int> dp(n);
dp[1] = nums[0];
for(int i = 2; i < n; i++)
dp[i] = max(dp[i-1], dp[i-2]+nums[i-1]);
res = max(res, dp[n-1]);
//不选择第一个,可以选择最后一个
vector<int> dp2(n+1);
for(int i = 2; i <= n; i++)
dp2[i] = max(dp2[i-1], dp2[i-2]+nums[i-1]);
res = max(res, dp2[n]);
return res;
}
};