原题力扣213打家劫舍2:https://leetcode.cn/problems/house-robber-ii/description/
class Solution {
public:
int robRange(vector<int>& values, int start, int end) {
int n = values.size();
vector<int> dp(n);
dp[start] = values[start];
dp[start + 1] = max(values[start], values[start + 1]);
for (int i = start + 2; i <= end; i++) {
dp[i] = max(dp[i - 1], dp[i - 2] + values[i]);
}
return dp[end];
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param values int整型vector
* @return int整型
*/
int maxPatrolValue(vector<int>& values) {
int n = values.size();
if (n == 0) {
return 0;
}
if (n == 1) {
return values[0];
}
if (n == 2) {
return max(values[0], values[1]);
}
return max(robRange(values, 0, n - 2), robRange(values, 1, n - 1));
}
};
时间复杂度:O(n),遍历两次数组
空间复杂度:O(n),存储dp数组

京公网安备 11010502036488号