LintCode 392. 打劫房屋 JavaScript算法

描述

假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。

给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,在不触动报警装置的情况下, 你最多可以得到多少钱 。

样例

- 样例 1:

输入: [3, 8, 4]
输出: 8
解释: 仅仅打劫第二个房子.

- 样例 2:

输入: [5, 2, 1, 3] 
输出: 8
解释: 抢第一个和最后一个房子

挑战

O(n) 时间复杂度 且 O(1) 存储。

解析

const houseRobber = function (nums) {
    let steal = 0                 // 记录窃的 数
    let preSteal = 0              // 记录上次窃的数
    let notSteal = 0              // 记录不窃的数
    for(let num of nums){
        steal = notSteal + num                    // 本次窃 的数为 上家不窃的数 + 这家的数
        notSteal = Math.max(preSteal, notSteal)   // 本次不窃, 延续之前窃了的 和 不窃中的 最大值
        preSteal = steal                          // 赋值上次窃的值  供下家判断使用
    }
   return Math.max(steal, notSteal)
};

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SmallTeddy/article/details/108511136