Dynamic Programming - 213. House Robber II
213. House Robber II You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed. All houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
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.
Example 1:
Input: [2,3,2] Output: 3 Explanation: You cannot rob house 1 (money = 2) and then rob house 3 (money = 2), because they are adjacent houses.
Example 2:
Input: [1,2,3,1] Output: 4 Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3). Total amount you can rob = 1 + 3 = 4.
思路:
这一题和198题多了一个条件就是房子是排列成一个圆形,也就是说,在前一题的基础上,只能从
0
偷到len(nums)-2
或者从1
偷到len(num)-1
。也是用动态规划求解。
代码:
func rob(nums []int) int {
if nums == nil || len(nums) == 0{return 0}
leng := len(nums)
if leng == 1 {return nums[0]}
return max(helper(nums, 0, leng-2), helper(nums, 1, leng-1))
}
func helper(input []int, start int, end int) int {
nums := input[start:end+1]
if nums == nil || len(nums) == 0{ return 0 }
leng := len(nums)
if leng == 1 {return nums[0]}
dp := []int{nums[0], max(nums[0], nums[1])}
index := 0
for i := 2; i < leng; i++ {
index = i % 2 //index^1: 0->1, 1->0.
dp[index] = max(dp[index] + nums[i], dp[index^1])
}
return max(dp[0], dp[1])
}
func max(i, j int) int {
if i > j {
return i
}
return j
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python开发简单记事本
- 在stm32开发可以调用c标准库的排序和查找 qsort bsearch
- Python解析excel文件并存入sqlite数据库
- python学习总结
- C语言calloc()函数:分配内存空间并初始化——stm32中的应用
- 提升代码的运算速度——代码优化的方法总结
- 自己实现sizeof+大小端测试
- 写一个程序检查一个整数是2的幂
- 持续部署入门:基于 Kubernetes 实现滚动发布
- Python源码分析(一)
- Learning Scrapy(一)
- Python源码分析(二) - List对象
- Python多线程机制
- Python高级用法总结
- Python中的上下文管理器和with语句