213. 打家劫舍II
作者:互联网
动态规划
import java.util.Arrays;
class Solution {
public int rob(int[] nums) {
if (nums.length <= 2){
return Arrays.stream(nums).max().getAsInt();
}
int n = nums.length;
int max = 0;
/**
* 在《198. 打家劫舍》的基础上,对第一个和最后一个房屋只抢一个
*/
int[] dp = new int[n + 1];
dp[2] = nums[1];
/**
* 从第2个房屋开始
*/
for (int i = 3; i <= n; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);
}
max = Math.max(dp[n - 1], dp[n]);
dp[1] = nums[0];
/**
* 从第1个房屋开始,但只抢到第n - 1个房屋
*/
for (int i = 2; i < n; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);
}
return Math.max(max, Math.max(dp[n - 2], dp[n - 1]));
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(n)
*/
https://leetcode-cn.com/problems/house-robber-ii/
标签:ii,213,nums,int,house,rob,II,打家劫舍 来源: https://www.cnblogs.com/taoyuann/p/15831556.html