leetcode练习-213. 打家劫舍 II(动态规划)

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/house-robber-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我们建立两个数组,分别保存第0-n-1和1-n的最大金额
因为最后一个和第一个不能同时出现,所以答案就只有在两种情况中出现,就是选第一个的最大值和不选第一个的最大值的两者的最大值。

class Solution {
public int rob(int[] nums) {
	if(nums==null||nums.length==0)
		return 0;
	if(nums.length==1)
		return nums[0];
	if(nums.length==2)
		return Math.max(nums[0],nums[1]);
	int dp1[]=new int[nums.length-1];//包含第一个
	int dp2[]=new int[nums.length-1];//不包含第一个
	
	dp1[0]=nums[0];
	dp1[1]=Math.max(nums[0],nums[1]);
	dp2[0]=nums[1];
	dp2[1]=Math.max(nums[1],nums[2]);
	
	for(int i=2;i

}

你可能感兴趣的:(算法,leetcode)