Q:你是一名专业的强盗,计划抢劫沿街的房屋。 每间房屋都藏有一定数量的金钱,唯一阻止你抢劫每间房屋的限制因素是邻近的房屋有保安系统连接,如果在同一晚上有两间 相邻的房屋被闯入,它将自动与警方联系。
已知一份代表每个房屋的金额的列表(房屋里的金额为非负整数),确定你可以在没有提醒警方的情况下抢劫的最高金额。
public int rob(int[] nums) {
int ifrobpri=0;//代表前一个元素偷了,所得的最大金额
int ifnotrobpri=0;//代表前一个的元素没有偷,所得的最大金额
for(int i=0;i<nums.length;i++)
{
int currob=ifnotrobpri+nums[i]; //当前元素投了,偷窃所得金额=前一个元素没有偷+当前所偷的金额
int curnotrob=Math.max(ifrobpri,ifnotrobpri);//当前的元素没有偷,所得的金额
//下面两步是更新操作
ifrobpri=currob;
ifnotrobpri=curnotrob;
}
return Math.max(ifrobpri,ifnotrobpri);
}