题解 | 打家劫舍(二)

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int rob (int[] nums) {
        // write code here
        // 最后一个房间和第一个房间相邻 意味着 两种情况 
        //一种是从第一家开始偷 这样 最后一家就不能偷 1 ~ n-1
        //一种是从第二家开始偷 这样 最后一家就可以偷 2 ~ n
        int n = nums.length;
        int[] a = new int[n-1];
        int[] b = new int[n];

        a[0] = nums[0];
        a[1] = Math.max(nums[0], nums[1]);
        for (int i=2; i<n-1; i++) {
            a[i] = Math.max(a[i-1], a[i-2] + nums[i]);
        }
        b[1] = nums[1];
        b[2] = Math.max(nums[1], nums[2]);
        for (int i=3; i<n; i++) {
            b[i] = Math.max(b[i-1], b[i-2] + nums[i]);
        }

        return a[n-2] > b[n-1] ? a[n-2] : b[n-1];
    
    }
}

全部评论

相关推荐

马上要带我人生中的第一个实习生了,想问问大家都喜欢什么的mentor?好让我有个努力的目标
拒绝996的劳伦斯很勇敢:看得见目标且护犊子的 具体就是明确告诉组员要干什么,然后当别的组甩dirty work时能护的组自家新人
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务