leetcode 213. 打家劫舍 II(dp)

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

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

示例 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 = [0]
输出:0

解题思路

因为房子是环形的,第一家和最后一家是连着的
因此我们可以分为3种情况

  1. 既不偷第一家,也不偷最后一家
  2. 只偷第一家
  3. 只偷最后一家

只偷第一家就等于忽略最后一个元素,只对前面n-1个元素动态规划。只偷最后一家的情况同理。
而既不偷第一家,也不偷最后一家的情况,已经出现在前面的动态规划的情况中了,所以不需要另外处理

代码

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

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

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

相关文章

HTTP缓存的深入介绍:Cache-Control和Vary

简介-本文范围 (Introduction - scope of the article) This series of articles deals with caching in the context of HTTP. When properly done, caching can increase the performance of your application by an order of magnitude. On the contrary, when overlooked o…

059——VUE中vue-router之路由嵌套在文章系统中的使用方法:

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue-router之路由嵌套在文章系统中的使用方法&#xff1a;</title><script src"vue.js"></script><script src"v…

web前端效率提升之浏览器与本地文件的映射-遁地龙卷风

1.chrome浏览器&#xff0c;机制是拦截url&#xff0c;      1.在浏览器Element中调节的css样式可以直接同步到本地文件&#xff0c;反之亦然&#xff0c;浏览器会重新加载css&#xff0c;省去刷新   2.在source面板下对js的编辑可以同步到本地文件&#xff0c;反之亦然…

linux : 各个发行版中修改python27默认编码为utf-8

该方法可解决robot报错&#xff1a;ascii codec cant encode character u\xf1 in position 16: ordinal not in range(128) 在下面目录中新增文件&#xff1a;sitecustomize.py 内容为 #codingutf-8 import sysreload(sys) sys.setdefaultencoding(utf8) 各个发行版放置位置&a…

归因分析_归因分析:如何衡量影响? (第2部分,共2部分)

归因分析By Lisa Cohen, Ryan Bouchard, Jane Huang, Daniel Yehdego and Siddharth Kumar由 丽莎科恩 &#xff0c; 瑞安布沙尔 &#xff0c; 黄美珍 &#xff0c; 丹尼尔Yehdego 和 亚洲时报Siddharth库马尔 介绍 (Introduction) This is our second article in a series wh…

ubuntu恢复系统_Ubuntu恢复菜单:揭开Linux系统恢复神秘面纱

ubuntu恢复系统Don’t try to convince yourself otherwise: along with all the good stuff, you’re going to have bad days with Linux.否则&#xff0c;请不要试图说服自己&#xff1a;与所有好的东西一起&#xff0c;您将在Linux上度过糟糕的日子。 You (or the users y…

linux与磁盘相关的内容

本节所讲内容1.认识SAS-SATA-SSD-SCSI-IDE硬盘2.使用fdisk对磁盘进行操作&#xff0c;分区&#xff0c;格式化3.开机自动挂载分区4.使用parted操作大于等于4T硬盘5.扩展服务器swap内存空间 MBR(Master Boot Record)主引导记录&#xff0c;也就是现有的硬盘分区模式。MBR分区的标…

leetcode 87. 扰乱字符串(dp)

使用下面描述的算法可以扰乱字符串 s 得到字符串 t &#xff1a; 如果字符串的长度为 1 &#xff0c;算法停止 如果字符串的长度 > 1 &#xff0c;执行下述步骤&#xff1a; 在一个随机下标处将字符串分割成两个非空的子字符串。即&#xff0c;如果已知字符串 s &#xff0c…

页面布局

页面布局两大类&#xff1a;   主站&#xff1a; 1 <div classpg-header> 2 <div stylewidth:980px;margin:0 auto;> 3 内容自动居中 4 </div> 5 <div classpg-content></div> 6 <div classpg-footer></div&…

sonar:默认的扫描规则

https://blog.csdn.net/liumiaocn/article/details/83550309 https://note.youdao.com/ynoteshare1/index.html?id3c1e6a08a21ada4dfe0123281637e299&typenote https://blog.csdn.net/liumiaocn/article/details/83550309 文本版&#xff1a; soanr规则java版 …

多变量线性相关分析_如何测量多个变量之间的“非线性相关性”?

多变量线性相关分析现实世界中的数据科学 (Data Science in the Real World) This article aims to present two ways of calculating non linear correlation between any number of discrete variables. The objective for a data analysis project is twofold : on the one …

wp博客写文章500错误_500多个博客文章教我如何撰写出色的文章

wp博客写文章500错误Ive written a lot of blog posts. Somewhere north of 500 to be exact. All of them are technical. 我写了很多博客文章。 确切地说是在500以北的某个地方。 所有这些都是技术性的。 About two dozen of them are actually good. 实际上大约有两打是不错…

leetcode 220. 存在重复元素 III(排序)

给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j&#xff0c;使得 abs(nums[i] - nums[j]) < t &#xff0c;同时又满足 abs(i - j) < k 。 如果存在则返回 true&#xff0c;不存在返回 false。 示例 1&#xff1a; 输入&#xff1a…

ON DUPLICATE KEY UPDATE

INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO&#xff0c;两个命令可以处理重复键值问题&#xff0c;在实际上它之间有什么区别呢&#xff1f;前提条件是这个表必须有一个唯一索引或主键。1、REPLACE发现重复的先删除再插入&#xff0c;如果记录有多个字段&#xff0c…

os.path 模块

os.path.abspath(path) #返回绝对路径os.path.basename(path) #返回文件名os.path.commonprefix(list) #返回list(多个路径)中&#xff0c;所有path共有的最长的路径。os.path.dirname(path) #返回文件路径os.path.exists(path) #路径存在则返回True,路径损坏返回Falseos.path…

探索性数据分析(EDA):Python

什么是探索性数据分析(EDA)&#xff1f; (What is Exploratory Data Analysis(EDA)?) If we want to explain EDA in simple terms, it means trying to understand the given data much better, so that we can make some sense out of it.如果我们想用简单的术语来解释EDA&a…

微服务框架---搭建 go-micro环境

1.安装micro 需要使用GO1.11以上版本 #linux 下 export GO111MODULEon export GOPROXYhttps://goproxy.io # windows下设置如下环境变量 setx GO111MODULE on setx GOPROXY https://goproxy.io # 使用如下指令安装 go get -u -v github.com/micro/micro go get -u -v github.co…

angular dom_Angular 8 DOM查询:ViewChild和ViewChildren示例

angular domThe ViewChild and ViewChildren decorators in Angular provide a way to access and manipulate DOM elements, directives and components. In this tutorial, well see an Angular 8 example of how to use the two decorators.Angular中的ViewChild和ViewChild…

浪潮之巅——IT产业的三大定律

http://www.cnblogs.com/ysocean/p/7641540.html转载于:https://www.cnblogs.com/czlovezmt/p/8325772.html

DStream算子讲解(一)

先把目录列好&#xff0c;方便有条理的进行整理转载于:https://www.cnblogs.com/leodaxin/p/7507600.html