博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
213. House Robber II
阅读量:4966 次
发布时间:2019-06-12

本文共 2076 字,大约阅读时间需要 6 分钟。

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: 3Explanation: 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: 4Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).             Total amount you can rob = 1 + 3 = 4.

 

Approach #1: DP + Memory. [C++]

class Solution {public:    int rob(vector
& nums) { int len = nums.size(); if (len == 0) return 0; if (len == 1) return nums[0]; vector
memo1(len+1, -1); vector
memo2(len+1, -1); int ans1 = rob(nums, 0, len-2, memo1); int ans2 = rob(nums, 1, len-1, memo2); return max(ans1, ans2); } private: int rob(const vector
& nums, const int start, int idx, vector
& memo) { if (idx < start) return 0; if (memo[idx] >= 0) return memo[idx]; int result = max(rob(nums, start, idx-2, memo)+nums[idx], rob(nums, start, idx-1, memo)); memo[idx] = result; return result; }};

  

Analysis:

Since House[1] and House[n] are adjacent, they cannot be robbed together. Therefore, the problem becomes to rob either House[1]-House[n-1] or House[2]-House[n], depending on which choice offers more money. Now the problem has degenerated to the , which is already been solved.

 

转载于:https://www.cnblogs.com/ruruozhenhao/p/10385724.html

你可能感兴趣的文章
Linux配置crontab
查看>>
类的私有成员,类方法与静态方法,属性,isinstance、issubclass,异常处理
查看>>
【树莓派】树莓派3与手机之间蓝牙连接配置记录
查看>>
冒泡排序
查看>>
SAP将字符转化为数字的函数
查看>>
C#备份及还原数据库的实现代码(粗略) // 利用C#还原数据库(SQL SERVER)备份文件到指定路径...
查看>>
sed
查看>>
基本数据类型(int,bool,str)
查看>>
spring如何实现Servlet3.0的ServletContainerInitializer
查看>>
商业爬虫学习笔记day4
查看>>
java验证码
查看>>
pycharm设置
查看>>
C++ STL map
查看>>
hadoop学习笔记——基础知识及安装
查看>>
iOS-----------进阶书籍收藏
查看>>
SignTool Error: No certificates were found that met all the given criteria
查看>>
sql server 查询分析器中表名无效,有红线,其实是这张表的
查看>>
hash 分区的用途是什么?
查看>>
linux/windows下启用和停止VMware后台服务的脚本
查看>>
在eclipse中API的封装和调用
查看>>