题意:
假如你是一个抢劫犯,在某天夜里抢劫一排挨着的房屋,但是不能抢劫相邻的房屋,请问能得到最多多少现金。每间房屋的存款顺序放在一个一维数组value[]中。
思路:
这道题一看就是一道DP问题。分两种情况,当前房屋被抢劫和不被抢劫。
被抢劫时,前一个房屋不被抢劫,rob = norob + value[i];
不被抢劫时,前一个房屋存在可能被抢劫也可能不被抢劫,但是这里应该取其中最大值的norob = max(rob,norob);
按顺序循环遍历每个房屋,直到最后一个房屋,返回当前max(rob,norob)。
public class HouseRobber {
public static int rob(int[] nums) {
int rob = 0;
int norob = 0;
int temrob = 0;
for(int i= 0; i < nums.length; i++){
temrob = norob + nums[i];
norob = Math.max(norob, rob);
rob = temrob;
}
return Math.max(rob, norob);
}
public static void main(String args[]){
int []value = {1,2,3,4,5,6,7,8,9,10};
System.out.println(HouseRobber.rob(value));
}
}