House Robber II
来源:互联网 发布:砸金蛋软件 编辑:程序博客网 时间:2024/05/21 22:54
题目来源http://www.lintcode.com/zh-cn/problem/house-robber-ii/
题目描述
所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。
给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,在不触动报警装置的情况下,你最多可以得到多少钱 。
解决方法 = 动态规划
House Robber I的升级版,只不过又增加了一个新的约束条件:第一个元素和最后一个元素不能同时使用。
因为第一个和最后一个元素不能同时出现,所以可看成求解两次House Robber I,即
- 有第一个元素,没有最后一个元素;
- 没有第一个元素,有最后一个元素;
两者的最大值即为所求
代码
class Solution {public: /** * @param nums: An array of non-negative integers. * return: The maximum amount of money you can rob tonight */ int houseRobber2(vector<int>& nums) { // write your code here int size = nums.size(); if (size == 0) { return 0; } if (size == 1) { return nums[0]; } if (size == 2) { return max(nums[0], nums[1]); } int r1 = houseRobber1(nums, 0, size - 2); int r2 = houseRobber1(nums, 1, size - 1); return max(r1, r2); } int houseRobber1(vector<int>& nums, int left, int right) { if (left == right) { return nums[left]; } if ((right - left) == 1) { return max(nums[left], nums[right]); } int n1 = nums[left]; int n2 = max(nums[left], nums[left + 1]); int n3, n4; left += 2; while (left <= right) { n3 = n1 + nums[left]; n4 = max(n2, n3); n1 = n2; n2 = n4; left++; } return max(n1, n2); }};
请尊重作者的劳动,转载请注明作者及原文地址(http://blog.csdn.net/lis_12/article/details/55212576).
如果觉得本文对您有帮助,请点击‘顶’支持一下,您的支持是我写作最大的动力,谢谢。
0 0
- LeetCode House Robber II
- 213House Robber II
- Leetcode213-House Robber II
- [LeetCode] House Robber II
- [leetcode] House Robber II
- 【leetcode】House Robber II
- House Robber II
- Leetcode: House Robber II
- House Robber II
- House Robber II
- leetcode House Robber II
- [leetcode] House Robber II
- LeetCode213:House Robber II
- [LeetCode]House Robber II
- House Robber II
- leetcode--House Robber II
- leetcode House Robber II
- House Robber II
- MVC,MVP 和 MVVM 的图示
- CCF之门禁系统(java)
- Java日期类
- Java线程学习笔记之线程简介
- 计算机BIOS设置和CMOS设置的区别与联系
- House Robber II
- 【BZOJ 2154】Crash的数字表格 莫比乌斯反演
- 项目管理中的”三角”博弈
- iOS Universal Links(通用链接)
- 《代码整洁之道》
- 第五天04 JAVA基础语法(认识对象--自动装箱、拆箱、数组基础[一维、二维数组]、for循环、数组对象、字符串对象)(学习笔记)
- Maximum Depth of Binary Tree
- 监听 textfield的输入
- 蓝桥杯 算法提高 算法提高 扶老奶奶过街