首页 > 其他分享 >力扣---213. 打家劫舍 II

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

时间:2022-12-14 22:56:01浏览次数:41  
标签:--- 偷窃 tem nums int 力扣 start II 房屋

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

示例 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/house-robber-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

本题是https://www.cnblogs.com/allWu/p/16978811.html这一题的进阶,区别是本题多了收尾相接的附加条件。

即(设总共有 n 个房间):

如果从第 0 间房开始偷窃,需要在第 n - 2 或者第 n - 1 个房间停止。                                                                                 如果从第 1 间房开始偷窃,需要在第 n - 1 或者第 n 个房间停止。

利用之前的思路,分别从第 0 个房间开始偷窃,到第 n - 1 个房间结束;以及从第 1 个房间开始偷窃,到第 n 个房间结束。遍历两遍,取最大值即可。

代码如下:

 1 class Solution {
 2     public int rob(int[] nums) {
 3         if (nums.length == 1) {
 4             return nums[0];
 5         } else if (nums.length == 2) {
 6             return Math.max(nums[0], nums[1]);
 7         }
 8         return Math.max(tem(nums, 0, nums.length - 1), tem(nums, 1, nums.length));
 9     }
10     private int tem(int[] nums, int start, int end) {
11         int max1 = nums[start];
12         int max2 = Math.max(nums[start + 1], nums[start]);
13         int tem = 0;
14         for (int i = start + 2; i < end; i ++) {
15             tem = Math.max(max1 + nums[i], max2);
16             max1 = max2;
17             max2 = tem;
18         }
19         return max2;
20     }
21 }

运行结果如下:

运行结果

 

标签:---,偷窃,tem,nums,int,力扣,start,II,房屋
From: https://www.cnblogs.com/allWu/p/16983910.html

相关文章

  • python-练习(类的使用)
    手机类"""练习:创建手机类,实例化两个对象并调用其函数,最后画出内存图。数据:品牌、价格、颜色、重量行为:通话"""classMobilePhone:def_......
  • java学习笔记--类、函数重载、this、static、继承、重写、多态
    <5>类1)类和对象类是把一类事物的静态属性和动态操作组合在一起所得的概念,相当于模型,或者说一个设计图纸。对象是类的一个个体,是根据类这个设计图纸造出来的实物,会产生和......
  • R语言代做编程辅导ASSIGNMENT THREE - BASIC R SKILS(附答案)
    全文链接:http://tecdat.cn/?p=30904PROBLEM1)ComparingVectorsDescription:Giventwovectors,thelongerwillbedetereminedandreturned.Intheeventofat......
  • NewStarCTF-WEEK1-Crypto-ezrsa复现
    2022-NewStar-Week1-ezrsa复现题干assertlen(flag)%5==0cnt=len(flag)//5flags=[flag[cnt*i:cnt*(i+1)]foriinrange(5)]可知flag分五段。第一段m......
  • Glibc---_IO_new_fdopen函数原理分析学习
    引言_IO_new_fdopen是Glibc中fdopen函数的内部实现,接受fd和打开mode,返回文件流FILE指针。是stdio.h中比较重要的函数,我们来一起看看它的源码实现。入参说明接受两个参数,fd是......
  • 入门练习3-12
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){inta;puts("请输入一个整数:");printf("整数a:");scanf("%d",&a);switch(a%2==0){case1:......
  • #yyds干货盘点#【愚公系列】2022年12月 微信小程序-图片加载和全屏适配问题
    前言在使用图片问题中可能会遇到各种各样的问题,比如图片加载不出来,图片显示在不同机型效果不同,图片加载展示问题等等。微信小程序image相关属性如下:属性类型默认值......
  • 牛客CSP-J 入门组 --- 货币系统(完全背包)
    链接:https://ac.nowcoder.com/acm/problem/21467来源:牛客网题目描述在网友的国度中共有n种不同面额的货币,第i种货币的面额为a[i],你可以假设每一......
  • flask-05
    一、并发编程操作系统发展史进程基础:操作系统上运行的程序,是资源分配的最小单位进程调度:时间片轮转法并发和并行同步,异步,阻塞,非阻塞python创建进程两种方式:类继......
  • Git提交代码报错husky > pre-commit
    在接触了Git版本控制之后,很长一段时间里就只使用commit、pull、push这三个命令,并没有进行深究。而早上在用commit代码提交前端代码的时候出现了报错信息husky>pre-commit......