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;
        }
    }
  • 相关阅读:
    关于JsonObject的笔记
    addHeader() 与 setHeader() 区别
    BeanUtils.copyProperties(A,B)字段复制用法
    servletcontext的小结
    枚举笔记
    关于spring mvc接受前台参数的笔记
    关于session和cookie
    servlet学习
    tomcat到底是干嘛的
    .json文件报错 ,点进去是Expected value at 1:0
  • 原文地址:https://www.cnblogs.com/tengdai/p/9282378.html
Copyright © 2011-2022 走看看