213. House Robber II【M】【60】【leetcode】
2016-02-26 15:44
330 查看
Note: This is an extension of House Robber.
After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the
first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
基本思路跟rob1 的思路一样,动态规划,每个点,分为偷和不偷,不一样的就是,成环了
这样以来,可以想象,第一个点和最后一个点不可能同时出现在偷里面,这样就算两次,一个不包括第一个点,一次不包括最后一个点,然后看哪个结果更好
After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the
first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
基本思路跟rob1 的思路一样,动态规划,每个点,分为偷和不偷,不一样的就是,成环了
这样以来,可以想象,第一个点和最后一个点不可能同时出现在偷里面,这样就算两次,一个不包括第一个点,一次不包括最后一个点,然后看哪个结果更好
class Solution(object): def rob(self, nums): #print nums res = 0 if not nums: return 0 if len(nums) == 1: return nums[0] steal = [0] * len(nums) notsteal = [0] * len(nums) steal[1] = nums[1] for i in range(1,len(nums)): #print i,'~' steal[i] = notsteal[i-1] + nums[i] notsteal[i] = max(steal[i-1],notsteal[i-1]) res = max(steal[-1],notsteal[-1]) #print res steal = [0] * len(nums) notsteal = [0] * len(nums) steal[0] = nums[0] #print nums for i in range(0,len(nums) - 1): #print i steal[i] = notsteal[i-1] + nums[i] notsteal[i] = max(steal[i-1],notsteal[i-1]) res = max(res,steal[-2],notsteal[-2]) return res
相关文章推荐
- SAP的号码范围(number range)SNRO和SNUM自动编号工具的用法
- servlet向jsp传递参数
- APK魔鬼瘦身计划
- Android 属性动画(Property Animation) 完全解析 (上)
- MySQL:MySQL日期数据类型、MySQL时间类型
- Cocoapods系列教程(二)——开源主义接班人
- 微信分享到好友或者朋友圈的截屏图片
- TextField委托方法记录(限制特定字符和限制字数)
- myeclipse更新完项目之后,JS以及JSP文件会报错
- MyEclipse10 中安装Activiti插件后,新建Activiti项目无Maven功能
- leetcode笔记:Contains Duplicate III
- 拦截器和过滤器的区
- 打印三角形,菱形
- [转] Spring注解@Component、@Repository、@Service、@Controller区别
- OpenStack 系列之File Share Service(Manila) Install Guide
- Android事件分发机制完全解析
- Android测试环境搭建
- OpenStack 系列之File Share Service(Manila) Install Guide
- JAVA EE环境搭建
- Android屏幕相关知识