码迷,mamicode.com
首页 > 其他好文 > 详细

强盗抢房子(II)

时间:2017-04-23 18:08:47      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:logs   for   直线   想法   ack   bsp   ==   length   题目   

题目:和之前一道抢房子一样,区别是增加了一个条件,房子是环形分布的,就是说不能同时偷第一个和最后一个,因为他们也是挨着的。。

思路:最优解很巧妙的想法,我们已经算过直线分布的了,那么环形分布和直线分布是不是有什么相似之处呢??其实直线分布如果在后面加一个财宝为0的房子,就是环形分布。环形分布只要去掉第一个或者最后一个,就是直线分布。。所以我们分别求第一个到倒数第二个房子区间获得的最大值和第二个到最后一个房子获得的最大值,取两者最大即可。。。

public int rob(int[] nums) {
        int n=nums.length;
        if(n==0) return 0;
        if(n ==1) return nums[0];
        if(n==2) return Math.max(nums[0],nums[1]);
     //0到n-2就是第一个到倒数第二个房子
     //1到n-1就是第二个到最后一个房子
     
return Math.max(f(nums,0,n-2),f(nums,1,n-1)); } private static int f(int[] nums,int s,int e){ int n=nums.length; int[] dp=new int[e-s+1]; dp[0]=nums[s]; dp[1]=Math.max(dp[0],nums[s+1]); for(int i=2;i<e-s+1;i++){ dp[i]=Math.max(dp[i-2]+nums[s+i],dp[i-1]); } return dp[e-s]; }

 

强盗抢房子(II)

标签:logs   for   直线   想法   ack   bsp   ==   length   题目   

原文地址:http://www.cnblogs.com/team42/p/6753112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!