Leetcode--213. 打家劫舍Ⅱ

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

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

示例 1:

输入: [2,3,2]
输出: 3
解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
示例 2:

输入: [1,2,3,1]
输出: 4
解释: 你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。

 

思路:与打家劫舍那道题类似(可以参考上一篇博客),这道题其实在上一道稍微做改进即可

分两种情况,也就是偷第一家就不偷最后一家,偷最后一家就不偷第一家,第一次是nums[0]~nums[n-2],第二次是nums[1]~nums[n-1]

两次遍历后观察哪种方式收益大。

提交的代码:

class Solution {
    public int rob(int[] nums) {
         int i;
         int n = nums.length;
         if(n==0)
         {
             return 0;
         }
         int[] dp1 = new int[n];
         int[] dp2 = new int[n];
         if(n==1)
         {
             return nums[0];
         }
         if(n==2)
         {
             return java.lang.Math.max(nums[0], nums[1]);
         }
         if(n==3)
         {
             return  java.lang.Math.max(nums[0], java.lang.Math.max(nums[1],nums[2]));
         }
         dp1[0] = nums[0];
         dp1[1] = java.lang.Math.max(dp1[0], nums[1]);
         for(i=2;i<n-1;i++)
         {
             dp1[i] = java.lang.Math.max(dp1[i-1], dp1[i-2]+nums[i]);
         }     
         dp2[1] = nums[1];
         dp2[2] = java.lang.Math.max(dp2[1], nums[2]);
         for(i=3;i<n;i++)
         {
             dp2[i] = java.lang.Math.max(dp2[i-1], dp2[i-2]+nums[i]);
         }
         return java.lang.Math.max(dp1[n-2], dp2[n-1]);
    }
}

完整的代码:


public class Solution213 {
     public static int rob(int[] nums) {
         int i;
         int n = nums.length;
         if(n==0)
         {
             return 0;
         }
         int[] dp1 = new int[n];
         int[] dp2 = new int[n];
         if(n==1)
         {
             return nums[0];
         }
         if(n==2)
         {
             return java.lang.Math.max(nums[0], nums[1]);
         }
         if(n==3)
         {
             return  java.lang.Math.max(nums[0], java.lang.Math.max(nums[1],nums[2]));
         }
         dp1[0] = nums[0];
         dp1[1] = java.lang.Math.max(dp1[0], nums[1]);
         for(i=2;i<n-1;i++)
         {
             dp1[i] = java.lang.Math.max(dp1[i-1], dp1[i-2]+nums[i]);
         }     
         dp2[1] = nums[1];
         dp2[2] = java.lang.Math.max(dp2[1], nums[2]);
         for(i=3;i<n;i++)
         {
             dp2[i] = java.lang.Math.max(dp2[i-1], dp2[i-2]+nums[i]);
         }
         return java.lang.Math.max(dp1[n-2], dp2[n-1]);
        }
     public static void main(String[] args)
     {
         int[] nums = {4,1,2};
         System.out.println(rob(nums));
     }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转 从红帽、GitHub和Docker看开源商业模式的进阶

从红帽、GitHub和Docker看开源商业模式的进阶 发表于2014-12-16 10:26| 7594次阅读| 来源http://stratechery.com/| 0 条评论| 作者Ben ThompsonDocker红帽GitHub开源CoreOS摘要&#xff1a;从技术角度来说&#xff0c;Docker无疑是可圈可点的&#xff0c;比如“write once run…

antimalware可以关闭吗_iPhone最好关闭这4个设置,手机流畅还省电

你抢到新款的iPhone12了吗&#xff1f;80%的小伙伴都会忽略的设置&#xff0c;你的iPhone手机最好关闭以下这4个设置。①关闭ios系统更新操作步骤&#xff1a;打开【设置】-【通用】-【软件更新】-【自动更新】-【下载iOS更新】&#xff0c;关闭即可。这样就不会莫名其妙地下载…

Leetcode--221.最大正方形

在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 思路&#xff1a;和最大长方形类似&#xff08;可以参照https://mp.csdn.net/postedit/102420219&…

tableau连接mysql_tableau 连接mysql的操作步骤

一&#xff1a;下载并安装好以下应用程序&#xff1a;1.数据库mysql2.数据库管理工具navicat premium3.数据可视化工具tableau4.mysql对应版本的ODBC驱动包二&#xff1a;配置ODBC1.控制面板→系统和安全→管理工具中找到"数据源ODBC"&#xff0c;并启动它&#xff0…

MVVM Light Toolkit使用指南

原文地址&#xff1a; https://blog.csdn.net/ldld1717/article/details/77040077概述MVVM Light Toolkit是一个Android MVVM 轻量级工具库&#xff0c;主要目的是更快捷方便的构建Android MVVM应用程序&#xff0c;工具库添加了一些Data Binding 不支持的属性&#xff0c;还有…

段永朝:界面——之内、之外与之间

来源&#xff1a;苇草智酷01画一个圈儿&#xff0c;就把平面分成圈内&#xff0c;圈外。这个圈儿&#xff0c;就成了界面。垒一道墙&#xff0c;就把空间分成墙里&#xff0c;墙外。这个墙&#xff0c;就成了界面。看一眼手机上的钟表&#xff0c;那一刻闪现的数字&#xff0c;…

Leetcode--5. 最长回文子串

给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2&#xff1a; 输入: "cbbd" 输出: "bb"…

mysql面试考点_mysql面试知识点

1 引擎-MyISAM和InnoDB的区别a 是否支持行级锁 :MyISAM 只有表级锁(table-level locking)&#xff0c;而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。b 是否支持事务和崩溃后的安全恢复&#xff1a;MyISAM 强调的是性能&#xff0c;每次查询具有原子性,其执行…

jquery 快速入门二

---恢复内容开始--- 操作标签 样式操作 样式类 addClass();//添加指定的CSS类名。 removeClass();//移除指定的类名. hasClass();//判断样式不存在 toggleClass();//切换css类名&#xff0c;如果有就移除&#xff0c;如果没有就添加 示例&#xff1a;开关灯和模态框 CSS css(&q…

中国工程院《全球工程前沿2020》报告在京发布

来源&#xff1a;科学网作者&#xff1a;李晨阳12月18日上午&#xff0c;中国工程院《全球工程前沿2020》报告在京发布。报告围绕机械与运载工程、信息与电子工程、化工冶金与材料工程、能源与矿业工程、土木水利与建筑工程、环境与轻纺工程、农业、医药卫生、工程管理9个领域&…

Leetcode--279. 完全平方数

给定正整数 n&#xff0c;找到若干个完全平方数&#xff08;比如 1, 4, 9, 16, ...&#xff09;使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 示例 2: 输入: n 13 输出: 2 解释: 13 4 9. 思路&#xf…

java基础题集

1.什么是java虚拟机&#xff1f;为什么java被称作是“平台无关的编程语言”&#xff1f; java虚拟机是一个可以执行java字节码的虚拟机进程。java源文件被编译成能被java虚拟机执行的字节码文件。 java被设计成允许应用程序可以运行在任意的平台&#xff0c;而不需要程序员为每…

AlphaFold证明人工智能可以解决基本的科学问题

来源&#xff1a;IEEE电气电子工程师Gif: DeepMindTwo examples of protein targets in the free modelling category.任何人工智能的成功实施都依赖于以正确的方式提出正确的问题。这就是英国人工智能公司DeepMind&#xff08;Alphabet的子公司&#xff09;在利用其神经网络解…

mysql部署策略_MySQL延迟问题和数据刷盘策略流程分析

一、MySQL复制流程官方文档流程如下&#xff1a;MySQL延迟问题和数据刷盘策略1、绝对的延时&#xff0c;相对的同步2、纯写操作&#xff0c;线上标准配置下&#xff0c;从库压力大于主库&#xff0c;最起码从库有relaylog的写入。二、MySQL延迟问题分析1、主库DML请求频繁原因&…

Java中文件的创建

File filenew File&#xff08;“text.txt”&#xff09; 运行这行代码&#xff0c;我们会发现相应的文件夹下无法找到创建的text.txt 首先 File 类是对文件系统的映射 并不是硬盘上真实的文件 所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会…

copy a random link

题目&#xff1a;A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.Return a deep copy of the list.1 /**2 * Definition for singly-linked list with a random pointer.3 * struct Ra…

计算的极限(零):逻辑与图灵机

来源&#xff1a; 数学职业家提出问题和解决问题的人2012&#xff0c;图灵诞辰100周年&#xff0c;献给这位伟大的开拓者。计算无处不在。走进一个机房&#xff0c;在服务器排成的一道道墙之间&#xff0c;听着风扇的鼓噪&#xff0c;似乎能嗅出0和1在CPU和内存之间不间断的流动…

java修改list中对象的值_Java中List集合的一点总结

为什么要用接口引用指向实现类的对象&#xff1f;这种写法其实java多态的表现形式多态的定义&#xff1a;指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。&#xff08;发送消息就是函数调用List list;是在栈区开辟一个空间…

Science公布年度十大科学突破!新冠疫苗居首位

来源 &#xff1a; 新华社编辑&#xff1a;宗华排版&#xff1a;郭刚美国《科学》杂志17日公布其评选的2020年十大科学突破&#xff0c;“以创纪录的速度开发和测试急需的新冠疫苗”当选头号突破。中国、美国、欧洲等地科研人员在2020年年初获得新冠病毒基因组序列后&#xff0…

openlayers实例_介绍OpenLayers

简介Web开发有一个专门的方向就是Web GIS&#xff0c;而Openlayers库就是Web GIS里的一个翘楚&#xff0c;想要开源的Web GIS的JavaScript库几乎就没有别的选择。OpenLayers的官网是OpenLayers - Welcome​openlayers.org目前最新的版本是5.3.x。它的github地址是openlayers/op…