相比于上一问,这道题加了一个限制条件是房子是一个环,即nums[0]和nums[n-1]是相邻的,两个房间不能同时抢劫。 那么实际上这个环可以分解为0到length-2以及1到length-1这两个区间,区间内的求解和上一问一致,求最大值即可。(即选不选择nums[0]的两种可能性比较一下,其他的思想和上一问一致)
public class Solution {
public int rob(int[] nums) {
if( nums.length == 0 )
{
return 0;
}
if( nums.length== 1 )
{
return nums[0];
}
return Math.max( fun(nums,0,nums.length-2),fun(nums,1,nums.length-1) );
}
int fun(int[] nums,int st,int ed)
{
// int[] rt = new int[nums.length];
if( st==ed )
{
return nums[st];
}
int d1=nums[st],d2=Math.max(nums[st],nums[st+1]);
for( int i=st+2;i<=ed;i++ )
{
int temp = d2;
d2 = Math.max( d2,d1+nums[i] );
d1 = temp;
}
return d2;
}
}
环形房屋抢劫问题的解决策略
本文讨论了在一个环形布局的房屋中实施抢劫的问题,通过将环形分割为两个独立的线性区间来简化问题。利用动态规划方法,我们能够有效地计算出在不抢劫相邻房屋的情况下,能够获取的最大价值。文章详细介绍了从初始状态开始,通过迭代更新最大价值的计算过程,最终得出最优解决方案。
1243

被折叠的 条评论
为什么被折叠?



