首页 > 其他分享 >【LeeCode】213. 打家劫舍 II

【LeeCode】213. 打家劫舍 II

时间:2023-04-12 23:10:09浏览次数:49  
标签:213 nums int len II LeeCode 房屋 check dp

【题目描述】

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

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

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

【示例】

【LeeCode】213. 打家劫舍 II_数组

【代码】admin

思路: 同 【LeeCode】198. 打家劫舍

但这里的题目要求写的是  前后2个房间相邻, 本题是把1个数组拆分成了2个数组,取做大值

例如, 房间分别是 {1, 2, 3, 4} 则结果就是 Max({1, 2, 3}, {2, 3, 4})

package com.company;

import java.util.Arrays;

class Solution {
    public int rob(int[] nums) {
        int len = nums.length;
        // 特殊场景, 如果只有1个, 则直接返回
        if (len == 1) return nums[0];

        int[] arr1 = Arrays.copyOfRange(nums, 0, len - 1);
        int[] arr2 = Arrays.copyOfRange(nums, 1, len);

        System.out.println( Math.max(check(arr1), check(arr2)));
        return Math.max(check(arr1), check(arr2));
    }

    public int check(int[] arr) {
        int len = arr.length;
        // dp[x] = y,表示前x个房间中获取的最大的金额是y
        int[] dp = new int[len + 1];
        // 初始化
        dp[0] = 0;
        dp[1] = arr[0];
        for (int i = 2; i <= len; i++){
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + arr[i - 1]);
        }
        return dp[len];
    }
}

public class Test {
    public static void main(String[] args) {
        new Solution().rob(new int[]  {2,3,2});  // 输出 3
        new Solution().rob(new int[] {1,2,3,1});  // 输出 4
        new Solution().rob(new int[] {1,2,3});  // 输出 3
    }
}

标签:213,nums,int,len,II,LeeCode,房屋,check,dp
From: https://blog.51cto.com/u_13682316/6186321

相关文章

  • 【LeeCode】1035. 不相交的线
    【题目描述】在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i]==nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个......
  • 重构——搬移语句到调用者(Move Statements to Callers),其反向重构:搬移语句到函数(213)
    8.4搬移语句到调用者(MoveStatementstoCallers)反向重构:搬移语句到函数(213)emitPhotoData(outStream,person.photo);functionemitPhotoData(outStream,photo){outStream.write(`<p>title:${photo.title}</p>\n`);outStream.write(`<p>location:${photo......
  • .net 6 MVC项目发布iis 没有views
    解决方案1.安装Nuget包:Install-PackageMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilation2.在Program.cs中的AddControllersWithViews()之后添加对AddRazorRuntimeCompilation()的调用。也就是builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();......
  • 【图论之拓扑排序】剑指 Offer II 114. 外星文字典
    剑指OfferII114.外星文字典讲解传送门constintN=26,M=N*N;classSolution{public:inth[N],e[M],ne[M],idx=0;boolst[N];intin[N],cnt=0;//上面三行要写在classSolution内部,不然每次调用不会清空voidadd(inta,intb){......
  • iis 7.5 下站点日志开启以及默认位置设置方法
       一直用iis6的日志管理,最近升级了2008所以打算启用一下iis7.5的日志,这里就为大家分享一下方法,需要的朋友可以参考下  在iis6时,通过iis管理器的日志配置可以找到站点日志存储的位置。但是在iis7下,iis管理器下的日志配置只能找到iis日志配置的主目录,......
  • MULTIINSTRUCT: Improving Multi-Modal Zero-Shot Learning via Instruction Tuning
    指令调优是一种新的学习范式,它可以根据指令指定的任务对预先训练好的语言模型进行微调,在各种自然语言处理任务中显示出良好的零目标性能。然而,对于视觉和多模态任务,它仍然没有被探索。在这项工作中,我们介绍了multiinstruction,这是第一个多模态指令调优基准数据集,由47个不同的多模......
  • 力扣 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II
    121.买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获......
  • leecode-day6
    1.152乘积最大连续子数组题目描述:给你一个整数数组nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位整数。子数组是数组的连续子序列。152乘积最大连续子数组思路:这道题跟day5的连续......
  • IIS 超时时间
    IIS超时时间原文链接:https://www.bbsmax.com/A/MAzAr6K1J9/asp.net默认的sessionstate模式是inproc(进程内),数据是在网站的应用程序池里面保存的。这样在web.config设置的超时时间,是在应用程序池没有发生回收的基础上才是有效的。这样就出现了问题,为什么应用程序池会发......
  • IIS Session设置超时时间
    IISSession设置超时时间原文链接:https://blog.csdn.net/zhoudong850/article/details/123274185在IIS发布网站后,网站登录每隔20分钟就会退出登录。可以通过IIS进行设置。1、进入IIS应用程序池,选择相关的网站的程序池。2、右键“高级设置”,选择“进程模型”下的“闲时超......