zoukankan      html  css  js  c++  java
  • 力扣----14. 打家劫舍(JavaScript实现)

    题目描述:

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

    给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

    示例 1:

    输入:[1,2,3,1]
    输出:4
    解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
      偷窃到的最高金额 = 1 + 3 = 4 。


    示例 2:

    输入:[2,7,9,3,1]
    输出:12
    解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
      偷窃到的最高金额 = 2 + 9 + 1 = 12 。

    思路:动态规划找通项公式 

      dp[imax(dp[i2nums[i]dp[i1])

      边界:

      dp[0]=nums[0]
      dp[1]=max(nums[0],nums[1])

    时间复杂度: O(n)

    空间复杂度:O(1)

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var rob = function(nums) {
        if(!nums || !nums.length ) return 0;
        if(nums.length === 1) return nums[0];
        if(nums.length === 2) return Math.max(nums[0], nums[1])
        let first = nums[0];
        let second = Math.max(nums[0], nums[1]);
        for (let i=2; i<nums.length; i++) {
            let temp = second;
            second = Math.max(first + nums[i], second)
            first = temp;
        }
        return second;
    };
  • 相关阅读:
    微软铁杆兄弟诺基亚开发基于Linux的手机
    Linux目录递归改变文件名大小写
    boa-0.94.13 移植到 ARM
    LINUX如何设置只允许SSH登陆?
    9.4. 使用 I/O 内存
    I-O 端口和 I-O 内存
    Linux 的虚拟文件系统--各结构之间的联系
    Linux 系统调用
    【poj2528】Mayor's posters
    【poj3225】Help with Intervals
  • 原文地址:https://www.cnblogs.com/manru75/p/13122238.html
Copyright © 2011-2022 走看看