题目链接这里
这个题目需要一个算法了。记录型的动态规划。
思路
设定两个数组。一个数组记录从第一个房子到抢劫当前房子的最大值。另一个数组记录从第一个房子到不抢劫当前房子的最大值。
那么下一个房子的不抢劫最大值就是之前的房子抢劫的最大值。下一个房子的抢劫最大值就是之前房子不抢劫最大值加上这个房子的金钱数。
递归到最后一个房子后。能赚到的最大值就是最后一个房子抢劫和不抢劫的两个值中的较大者。
import java.util.Arrays;
public class Solution {
public static int robbed[];
public static int notRobbed[];
public static int[] houses;
public int rob(int[] nums) {
if(nums==null||nums.length==0)
{
return 0;
}
houses=nums;
robbed=new int [nums.length];
notRobbed=new int[nums.length];
Arrays.fill(robbed, 0);
Arrays.fill(notRobbed, 0);
robbed[0]=nums[0];
notRobbed[0]=0;
for(int i=1;i<nums.length;i++)
{
process(i);
}
return Math.max(robbed[nums.length-1],notRobbed[nums.length-1]);
}
public static void process(int lastHouseIndex)
{
robbed[lastHouseIndex]=notRobbed[lastHouseIndex-1]+houses[lastHouseIndex];
notRobbed[lastHouseIndex]=Math.max(robbed[lastHouseIndex-1],notRobbed[lastHouseIndex-1]);
}
}