首页 > 其他 > 详细

LeetCode 198. 打家劫舍

时间:2020-05-29 10:00:13      阅读:52      评论:0      收藏:0      [点我收藏+]

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. 打家劫舍

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!