思路:假定数组 dp[i] 表示从房间 0 … i 可获得的最大价值,则 i 房间的东西有两种选择,偷或者不偷: dp[i] = max(dp[i-1], dp[i-2]+nums[i])
“`c++
class Solution {
public:
int rob(vector& nums) {
int n = nums.size();
if (n == 1) return nums[0];
vector dp(n, 0);
dp[0] = nums[0];
dp[1] = max(dp[0], nums[1]);
for (int i=2; i
共以下 7 个回答
子问题: dp[i] = max(dp[i-1],dp[i-2]+nums[i-1]);
class Solution {
public int rob(int[] nums) {
if(nums.length 1)
return nums[0];
int[] dp = new int[nums.length + 1];
dp[0] = nums[0];
dp[1] = Math.max(nums[0],nums[1]);
for(int i = 2; i < nums.length; i++){
dp[i] = Math.max(nums[i] + dp[i-2],dp[i-1]);
}
return dp[nums.length-1];
}
//时空复杂度均为ON、
思路:假定数组 dp[i] 表示从房间 0 … i 可获得的最大价值,则 i 房间的东西有两种选择,偷或者不偷: dp[i] = max(dp[i-1], dp[i-2]+nums[i])
“`c++& nums) { dp(n, 0);
class Solution {
public:
int rob(vector
int n = nums.size();
if (n == 1) return nums[0];
vector
dp[0] = nums[0];
dp[1] = max(dp[0], nums[1]);
for (int i=2; i