class Solution {
public int rob(int[] nums) {
if(nums.length1){
return nums[0];
}
int dp[] = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0],nums[1]);
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.empty()) {
return 0;
}
int size = nums.size();
if (size == 1) {
return nums[0];
}
int first = nums[0], second = max(nums[0], nums[1]);
for (int i = 2; i < size; i++) {
int temp = second;
second = max(first + nums[i], second);
first = temp;
}
return second;
}
};
class Solution {
public int rob(int[] nums) {
int pre = 0, cur = nums[0];
for (int i = 1; i < nums.length; i++) {
int temp = Math.max(pre + nums[i], cur);
pre = cur;
cur = temp;
}
return cur;
}
}
“`C++
class Solution {
public:
int rob(vector& nums) {
int pprev = nums[0];
if (nums.size() == 1) return pprev;
int prev = max(pprev, nums[1]);
if (nums.size() == 2) return prev;
int result;
for (int i = 2; i < nums.size(); i++) {
result = max(pprev + nums[i], prev);
pprev = prev; prev = result;
}
return result;
}
public int rob(int[] nums) {
int n = nums.length;
int[] dp = new int[n+2];
for(int i = 0; i < n;i++){
dp[i+2] = Math.max(dp[i+1],dp[i] + nums[i]);
}
return dp[n+1];
}
共以下 12 个回答
class Solution {
public int rob(int[] nums) {
if(nums.length1){
return nums[0];
}
int dp[] = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0],nums[1]);
}
啊
“`java
class Solution {
public int rob(int[] nums) {
//假设最大方案是以i结尾的房屋,则dp[i] = max(dp[i-2], dp[i-3])
int res = 0;
int length = nums.length;
if (length == 1) {
return nums[0];
}
if (length == 2) {
return Math.max(nums[0], nums[1]);
}
int[] dp = new int[length];
dp[0] = nums[0];
dp[1] = nums[1];
dp[2] = nums[0] + nums[2];
res = Math.max(dp[2], dp[1]);
for (int i = 3; i < length; i++) { dp[i] = Math.max(dp[i - 2], dp[i - 3]) + nums[i]; res = Math.max(res, dp[i]); } return res; } }
时间复杂度:O(n)
空间复杂度:O(1)
MY动态规划
时间:O(n)
空间:O(1)
C++实现
“`C++& nums) {
class Solution {
public:
int rob(vector
int pprev = nums[0];
if (nums.size() == 1) return pprev;
int prev = max(pprev, nums[1]);
if (nums.size() == 2) return prev;
};
“`
时间复杂度:O(n),空间复杂度O(n)
可用两个变量优化
【思路】DP,dp[i]为在0~i房屋中能偷窃到的最大金额
【复杂度】时间O(n),空间O(1)
时间复杂度O(n),空间O(1)