栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

213. House Robber II抢劫房子2 Java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

213. House Robber II抢劫房子2 Java

你是一名职业劫匪,计划抢劫街道上的房屋。每个房子都藏着一定数量的钱。这个地方的所有房屋都排成一个圆圈。这意味着第一个房子是最后一个房子的邻居。同时,相邻的房屋都连接了一个安全系统,如果同一天晚上有两个相邻的房屋被闯入, 它会自动报警。

给定一个nums表示每所房子的钱数的整数数组,返回你今晚可以在不惊动警察的情况下抢劫的最大金额。

示例 1:
输入: nums = [2,3,2]
输出: 3
解释:你不能先抢房子 1(钱 = 2)然后再抢房子 3(钱 = 2),因为它们是相邻的房子。

示例 2:
输入: nums = [1,2,3,1]
输出: 4
解释:抢房子 1(钱 = 1),然后抢房子 3(钱 = 3)。
您可以抢劫的总金额 = 1 + 3 = 4。

示例 3:
输入: nums = [1,2,3]
输出: 3

约束:
1 <= nums.length <= 100
0 <= nums[i] <= 1000

思路

  1. 在198抢房子的基础上, 这个第一位和最后一位是挨着的, 所以我们取第二位到最后一位和第一位到倒数第二位的最大值Math.max(nums[0]~nums[length-2], nums[1] ~nums[length-1])
  2. 需要注意的是, 当长度为1时, 直接返回数组里面的数
class Solution {
    public int rob(int[] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        return Math.max(solution(nums, 0, nums.length - 1), solution(nums, 1, nums.length));
    }
    static int solution(int[] nums,int start, int end) {
        int pre=0,res=0;
        for (int i=start;i 

时间复杂度O(n)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号