213. 打家劫舍 II --力扣 --JAVA

简介: 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

 题目

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

解题思路

    1. 将环断开,分情况为偷首节点和不偷首节点的情况;
    2. 限制起始和结束位置,对偷盗金额进行最大值计算;

    代码展示

    class Solution {
        public int rob(int[] nums) {
            if(nums.length == 1){
                return nums[0];
            }
            int n = nums.length;
            //分两种情况计算:偷首节点和不偷首节点
            return Math.max(nums[0] + rob1(nums, 2 , n - 1), rob1(nums, 1, n));
        }
        private int rob1(int[] nums, int start, int end){
            int steal0 = 0;     //上一节点未偷
            int steal1 = 0;     //当前节点最大值
            for (int i = start; i < end; i++){
                int max = Math.max( steal1, steal0 + nums[i]);
                steal0 = steal1;
                steal1 = max;
            }
            return steal1;
        }
    }

    image.gif


    目录
    相关文章
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    27 1
    |
    6天前
    |
    算法 Java C语言
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    25 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    42 0
    |
    6天前
    |
    存储 canal 算法
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    31 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    28 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    22 0
    |
    6天前
    |
    算法 Java 索引
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    29 0
    |
    6天前
    |
    存储 算法 Java
    [Java·算法·简单] LeetCode 383. 赎金信 详细解读
    [Java·算法·简单] LeetCode 383. 赎金信 详细解读
    26 0
    |
    6天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 9. 回文数 详细解读
    [Java·算法·简单] LeetCode 9. 回文数 详细解读
    23 0

    热门文章

    最新文章