描述

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

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

示例 1:

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

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

解析

理解得知,第一间和最后一间不能同时获取。

固,可以拆解为两部分,要么选第一间,要么选最后一间。

参考[LeetCode] 198. 打家劫舍 ☆(动态规划)的做法,将数组分为2个部分,1部分包含第一间不包含最后一间,另一部分包含最后一间不包含第一间。

得解。

代码

public int rob(int[] nums) {
if (null == nums || nums.length <= 0) {
return 0;
} else if (nums.length == 1) {
return nums[0];
} else if (nums.length == 2) {
return Math.max(nums[0], nums[1]);
}
return Math.max(robH(nums, 0, nums.length - 1), rob1(nums, 1, nums.length));
} public int robH(int[] nums, int start, int end) {
if (null == nums || nums.length == 0) {
return 0;
} else if (nums.length == 1) {
return nums[start];
} else if (nums.length == 2) {
return Math.max(nums[start], nums[start + 1]);
}
int preVal = nums[start];
int curVal = Math.max(nums[start], nums[start + 1]);
for (int i = start + 2; i < end; i++) {
int temp = Math.max(curVal, preVal + nums[i]);
preVal = curVal;
curVal = temp;
}
return curVal;
}

最新文章

  1. react入门(5)
  2. 团队项目——站立会议DAY6
  3. Cardinal:一个用于移动项目开发的轻量 CSS 框架
  4. 零散的JavaScript公用方法
  5. [C#]二维码(QR Code)生成与解析
  6. windows phone7 豆瓣FM
  7. 三种查看SqlServer中数据物理pge页的方法
  8. UVa 10088 (Pick定理) Trees on My Island
  9. mapreduce 多路输出
  10. Linux创建新用户以及useradd adduser的区别
  11. 使用 线性规划 解决 数字 排序问题, +Leapms模型
  12. Parquet 格式文件,查看Schema
  13. Java 接口 Comparable
  14. VirtualBox 安装Mac OS
  15. shopnc 手机网站配置
  16. Android xml 绘制图形
  17. 吴裕雄 19-Mysql 连接的使用
  18. EOS开发基础之四:使用cleos命令行客户端操作EOS——智能合约之eosio.bios和eosio.token
  19. 构建基于阿里云OSS文件上传服务
  20. WPF性能调试系列 – Ants Performance Profiler

热门文章

  1. promise 和 async await比较
  2. jdk1.8使用枚举类
  3. JS 生成随机字符串 随机颜色
  4. Cisco ASA 5505配置详解(v8.3之前版本)
  5. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件实现的多码率视频点播功能说明
  6. Android逆向破解:Android Killer使用
  7. .NET 文件上传和文件接收
  8. Python技术点
  9. 《ucore lab1 exercise5》实验报告
  10. 防范sql注入值得注意地方