打家劫舍II

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

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

示例 1:

输入: [2,3,2]

输出: 3

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

示例 2:

输入: [1,2,3,1]

输出: 4

解释: 你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。

偷窃到的最高金额 = 1 + 3 = 4 。

基本思路:

第一个房屋和最后一个房屋是紧挨着的,说明第一个房屋和最后一个房屋不能同时盗取。我们可以考虑两种情况:

(1)考虑偷取[0, n - 2]的房屋。

(2)考虑偷取[1, n - 1]的房屋。

取上述两种情况的大者即为答案。

 1 class Solution {
 2     public int rob(int[] nums) {
 3         if(nums.length==0) return 0;
 4         if(nums.length==1) return nums[0];
 5         int[] leftNums=new int[nums.length-1];
 6         int[] rightNums=new int[nums.length-1];
 7         for(int i=0;i<nums.length-1;i++){
 8             leftNums[i]=nums[i];
 9         }
10         for(int i=1;i<nums.length;i++){
11             rightNums[i-1]=nums[i];
12         }
13         int left=kRob(leftNums);
14         int right=kRob(rightNums);
15         return left>right?left:right;
16     }
17
18     public int kRob(int[] nums) {
19         int n=nums.length;
20         if(n==0) return 0;
21         if(n==1) return nums[0];
22         int[] dp=new int[n];
23         dp[0]=nums[0];
24         dp[1]=nums[1];
25         if(dp[1]<dp[0])dp[1]=dp[0];
26         for(int i=2;i<n;i++){
27             dp[i]=dp[i-2]+nums[i];
28             if(dp[i]<dp[i-1]) dp[i]=dp[i-1];
29         }
30         return dp[n-1];
31     }
32 }

转载于:https://www.cnblogs.com/kexinxin/p/10203038.html

Leetcode 213.大家劫舍II相关推荐

  1. Leetcode_6_Dynamic Programming_198,213打家劫室,打家劫室II

    自己写滴~ 198.打家劫室 class Solution {public int rob(int[] nums) {if(nums.length==0) return 0; int[] dp=new ...

  2. LeetCode实战:环形链表 II

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a lin ...

  3. 动态规划——打家劫舍||(Leetcode 213)

    题目选自Leetcode 213. 打家劫舍|| 给定一个代表金额的非负整数数组nums,相邻房间不可偷并且房间是围成一圈的,让我们输出可以偷窃到的最高金额. 题目描述: 解题思路: 这三种情况哪个结 ...

  4. Leetcode 142. Linked List Cycle II

    地址:Leetcode 142. linked list Cycle II 问题描述:检测链表是否存在环,是的话返回环入口,否则返回None. 这道题有两个思路,一个是经典的快慢指针的思路,另外一个是 ...

  5. 【To Do】LeetCode 142. Linked List Cycle II

    LeetCode 142. Linked List Cycle II Solution1:我的答案 这道题多次遇到,牢记此解法 这道题要深思一下,快指针和慢指针的速度对比不同,会产生什么不同的结果? ...

  6. 【??链表】LeetCode 92. Reverse Linked List II

    LeetCode 92. Reverse Linked List II Solution1: 参考网址:http://www.cnblogs.com/grandyang/p/4306611.html ...

  7. LeetCode 445. Add Two Numbers II

    LeetCode 445. Add Two Numbers II Solution1:我的答案 利用了栈,这样就不用翻转链表了... /*** Definition for singly-linked ...

  8. 【重点:BFS】LeetCode 407. Trapping Rain Water II

    LeetCode 407. Trapping Rain Water II 博客转载自:http://www.cnblogs.com/grandyang/p/5928987.html [太难了,被智商碾 ...

  9. C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组

    C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在 ...

最新文章

  1. Metaspace 引起的 FullGC 问题排查过程及解决方案
  2. 2020-12-11 图片格式互转:base64、PIL Image opencv cv2互转
  3. bootstrap模态框使用
  4. 数据结构之希尔排序图文详解及代码(C++实现)
  5. 《编译原理》第三章知识点
  6. Oracle新建用户并授权
  7. 老板怒了,“我们赚钱你们花钱,还总出毛病!”
  8. 《JAVA与模式》之装修者模式
  9. java小数换成字符实现加法_第一、二次笔记总结
  10. DevExpress控件介绍
  11. .com才是顶级域名,baidu.com是二级域名
  12. Oracle swap 100%案例分析
  13. 通过SAXReader解析XML
  14. 区块链技术介绍PPT
  15. obs多推流地址_基于腾讯云的OBS 推流
  16. 【从Northwind学习数据库】汇总查询
  17. 百度android离线下载,离线宝app下载-百度离线宝 安卓版v1.0.0.0-PC6安卓网
  18. 独孤思维:赚钱项目的内卷和躺平
  19. 似然函数、最大似然估计简单理解
  20. 中冠百年|投资理财,千万不要犯这些错误

热门文章

  1. 案例:Oracle dul数据挖掘 磁盘损坏dul提取数据文件中表的数据及l
  2. 最锋利的Visual Studio Web开发工具扩展:Web Essentials详解(转)
  3. 机器学习中的模型评价、模型选择及算法选择
  4. c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明
  5. react hooks使用_如何使用Hooks将React类组件转换为功能组件
  6. npm构建脚本_NPM脚本简介
  7. python连接数据库,处理数据结果后生成excel文件
  8. java mvc view_对Springmvc view层的理解
  9. 零基础参加java培训哪家机构好
  10. java开发培训中消息中间件的优势有哪些