LeetCode第213題:打家劫舎II(C++)
830 ワード
213.家を略奪するII-力扣(LeetCode)
LeetCode第198題:打家劫舎(C++)qq_32523711のブログ-CSDNブログの拡張.
配列の首尾は1つの輪なので、首尾も隣接しています.1つ目の考えは、輪かどうかにかかわらず、どうせ1つ目と最後の1つが同時に奪うことができないことだ.
では,シーケンスを0~n−1,1~nの2つの部分に分けてそれぞれ計算し,最後に最大値を返すとよい.
LeetCode第198題:打家劫舎(C++)qq_32523711のブログ-CSDNブログの拡張.
配列の首尾は1つの輪なので、首尾も隣接しています.1つ目の考えは、輪かどうかにかかわらず、どうせ1つ目と最後の1つが同時に奪うことができないことだ.
では,シーケンスを0~n−1,1~nの2つの部分に分けてそれぞれ計算し,最後に最大値を返すとよい.
class Solution {
public:
int rob(vector& nums) {
if(nums.size() == 0) return 0;
if(nums.size() == 1) return nums[0];
int pre = 0, cur = 0;
for(int i = 0; i < nums.size()-1; ++i){//0~n-1
int tmp = cur;
cur = max(cur, pre+nums[i]);
pre = tmp;
}
int res1 = cur;
pre = 0, cur = 0;
for(int i = 1; i < nums.size(); ++i){//1~n
int tmp = cur;
cur = max(cur, pre+nums[i]);
pre = tmp;
}
return max(cur, res1);
}
};