Leetcode 534打劫房屋II python
描述
在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。
给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,在不触动报警装置的情况下, 你最多可以得到多少钱 。
这题是House Robber的扩展,只不过是由直线变成了圈
您在真实的面试中是否遇到过这个题?
样例
样例1
输入: nums = [3,6,4]
输出: 6
样例2
输入: nums = [2,3,2,3]
输出: 6
思路:
动态规划求解
(1)不考虑第一间房子和最后一间房子是挨着的时
考虑前i项的结果dp[i]时,
dp[i]为到达第i个房间时,得到的最大收益,A为房间钱数组。
当i = 1, 返回dp[0] = A[0]
当i = 2, 返回dp[1] = max(A[0], A[1])
当i = 3, 分为偷3号房屋和不偷3号房屋,
偷的情况下, 2号房间就不能偷了,结果为A[2] + dp[0]
不偷的情况下,结果为dp[1]
所以返回dp[2] = max(dp[0] + A[2], dp[1])
以此类推,dp[i] = max(dp[i-2] + A[i], dp[i-1])
(2)考虑第一间房子和最后一间房子是挨着时
区别在于1号房屋和最后一号房屋只能二选一
即把1号房间舍弃,或者最后一号房间舍弃。在这两种情况下选最优。
class Solution:"""@param nums: An array of non-negative integers.@return: The maximum amount of money you can rob tonight"""def houseRobber(self, nums):# write your code hereif len(nums) == 1:return nums[0]return max(self.houseRobber2(nums[1:]), self.houseRobber2(nums[:-1]))def houseRobber2(self, nums):if len(nums) == 0:return 0dp = [0 for _ in nums]dp[0] = nums[0]for i in range(1, len(nums)):if i == 1:dp[i] = max(nums[0], nums[i])else:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])return dp[-1]c=Solution()
d=c.houseRobber([2,3,2,3])
print(d)
结果:6
Leetcode 534打劫房屋II python相关推荐
- LeetCode 392打劫房屋 python
描述 假设你是一个专业的窃贼,准备沿着一条街打劫房屋.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警. 给 ...
- LeetCode 142. 环形链表 II - Python 快慢指针法+详解
题目 142. 环形链表 II 难度中等761 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的 ...
- LeetCode 213 House Robber II Python
题意:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的 ...
- LintCode刷题——打劫房屋I、II、III
打劫房屋I: 题目内容: 假设你是一个专业的窃贼,准备沿着一条街打劫房屋.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该 ...
- lintcode:打劫房屋 III
题目 打劫房屋 III 在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树.与前两次偷窃 ...
- Leetcode - Subsets I,II
Leetcode - 078. Subsets 这道题重定义了什么叫可行解: 一般而言,可行解需要满足强约束性条件集,而本题的可行解就是单一弱约束性条件(distinct integers,只需要当前 ...
- LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)
LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...
- LeetCode 字符串简单部分 算法 python实现
''' #2018-06-02 June Saturday the 22 week, the 153 day SZ LeetCode 字符串简单部分 算法 python实现 https://leetc ...
- Leetcode - Permutations I,II
Leetcode - 046 Permutations 全排列问题是回溯的典型例题: 1.可行解的组成形式是给定数组中的所有数的组合,故而大小上可以作为可行解判定条件 2.每次需要在剩下可被选中的集合 ...
最新文章
- java json数据输出,java服务器端输出JSON格式数据
- Silverlight教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
- hdu 3449 有依赖性的01背包
- MeteoInfoLab脚本示例:TRMM 3B43 HDF数据
- 解决VMWARE安装macos系统找不到虚拟磁盘问题
- 真诚推荐几个最值得关注的前端公众号
- Android数据存储之sharedpreferences与Content Provider
- BootStrap笔记-按钮相关
- 用虚拟机VMware安装雪豹提示:当前主机无法支持64位操作系统
- bzoj 3679: 数字之积
- 为什么会有jQuery、Dojo、Ext、Prototype、YUI、Zepto这么多JS包?
- 电脑网页长截图怎么弄的?电脑上怎么截图?
- 【JVM · 调优】监控及诊断工具
- 如何查看浏览器的DNS 缓存信息
- Leetcode——714. Best Time to Buy and Sell Stock with Transaction Fee
- virtualBox实现windows和Ubuntu之间的复制粘贴
- android自动照相机2.0,Koda相机app下载-Koda相机v2.0.12 安卓版-腾牛安卓网
- EDR端点检测与响应
- vscode编辑器搜索小技巧
- 海盗王GM工具箱 - 物品编辑器
热门文章
- 有关使用junit依赖出现@Before或者@Before注解不生效
- Mabtyis无侵入式编程
- 使用spring boot+shiro+jwt+mybatis-plus搭建项目框架
- PaddleOCR——DEMO
- BugKuCTF 加密 滴答~滴
- BugKuCTF 杂项 眼见非实(ISCCCTF)
- Little Sub and Applese
- Java多线程环境检测系统中是否存在死锁和死锁恢复代码示例
- hive.ql.exec.DDLTask. MetaException(message:java.io.IOException: Attempt to start meta tracker faile
- JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】