zoukankan      html  css  js  c++  java
  • (Java) LeetCode 198. House Robber —— 打家劫舍

    You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.

    Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.

    Example 1:

    Input: [1,2,3,1]
    Output: 4
    Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
                 Total amount you can rob = 1 + 3 = 4.

    Example 2:

    Input: [2,7,9,3,1]
    Output: 12
    Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
                 Total amount you can rob = 2 + 9 + 1 = 12.
    

    哎,现在真是打劫也得会算法写代码,不然都赚不到钱!很简单的一个动态规划的问题,假设dp[i]是截止到nums[i]为止能抢到的最多的钱,那么它要么是抢nums[i],要么不抢。如果抢,那就是dp[i-2] + nums[i],如果不抢,那就是dp[i-1],二者取最大值。观察到dp[i]只和前两个状态有关,所以空间上可以优化成常数。


    Java

    class Solution {
        public int rob(int[] nums) {
            if (nums == null || nums.length == 0) return 0;    
            if (nums.length == 1) return nums[0];
            int dp1 = nums[0];
            int dp2 = Math.max(dp1, nums[1]);
            int dp = dp2;
            for (int i = 2; i < nums.length; i++) {
                dp = Math.max(dp1 + nums[i], dp2);
                dp1 = dp2;
                dp2 = dp;
            }
            return dp;
        }
    }
  • 相关阅读:
    RDD执行延迟执行原理
    spark应用运行机制解析1
    spark streaming job生成与运行
    spark的Task的序列化
    spark将计算结果写入到hdfs的两种方法
    spark的runJob函数2
    SVG---------SVG sprite 使用示例
    段落边框——paraBox.scss
    背景条纹——bgStripes.scss
    css3动画——基本准则
  • 原文地址:https://www.cnblogs.com/tengdai/p/9282378.html
Copyright © 2011-2022 走看看