码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 198. 打家劫舍

时间:2020-05-29 09:28:12      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:ems   max   bsp   div   特殊情况   ber   ram   ble   problem   

https://leetcode-cn.com/problems/house-robber/

 

经典dp问题.

    /**
     * 打家劫舍问题,这个是这类问题中最简单的一题
     * @param nums
     * @return
     */
    public int rob(int[] nums) {
        int length = nums.length;
        //处理特殊情况,避免下面初始化dp数组的时候引起越界问题
        if(length == 0){
            return 0;
        }else if(length == 1){
            return nums[0];
        }
        int[] dp = new int[length];
        //对于第一家,只有打劫才是最好的情况,所以直接加上第一家的钱。
        dp[0] = nums[0];
        //对于第二家,我们要看第一家和第二家那家的钱最多 ,取最多的那家打劫。
        dp[1] = Math.max(dp[0],nums[1]);
        for(int i = 2; i < length; i++){
            //对于第i家,因为不能连续打劫,所以要取max(打劫第i-1家,打劫第i-2家+第i家)的值。
            dp[i] = Math.max(dp[i-1],dp[i-2] + nums[i]);
        }
        //因为打劫完钱最多的肯定在最后一家或者倒数第二家,所以返回其较大值。
        return Math.max(dp[length-1],dp[length-2]);
    }

 

LeetCode 198. 打家劫舍

标签:ems   max   bsp   div   特殊情况   ber   ram   ble   problem   

原文地址:https://www.cnblogs.com/ZJPaang/p/12985448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!