专栏 | 九章算法
网址 | www.jiuzhang.com
题目描述
小偷找到了一个新的偷盗地点,这个地区的房子组成了一个环,如果小偷同时偷窃了两个直接相邻的房子,就会触发警报器。在不触发警报器的情况下,求小偷可以抢到的最多的money。
解题思路
本题是House Robber的follow up。
House Robber-i中房子排列成一个序列,用动态规划就可以,上过《九章算法强化班》的同学应该都已经会做啦。
按照课堂上讲过的动态规划四要素说说dp状态的定义:df[i]表示前i个房子能获得的最大价值,dp[i] = max(dp[i-2] + nums[i], dp[i-1])。而在本题中,房子难点在于排列成一个环。对于环上的问题,有一个小技巧就是就是拆环:把环展成一条直线。
本题中,可以先假设房子排成一条直线,从0到n-1,那么我们如果用原来的动态规划算法求得的最优解可能同时取到房子0和房子n-1,而因为0和n-1在本题中是连在一起的,不能同时取到。也就是说,我们要分两种情况:要么不偷房子0(此时房子n-1是否偷未知),要么不偷房子n-1。基于这两种情况,我们对不含房子0的序列做一次动态规划,对不含房子n-1的序列做一次动态规划,取较大值就可。
参考程序

面试官角度分析
本题是一个follow up,在解决robber-i的情况下,对于环的特殊性给出解决方法,实现O(n)算法可以达到hire。
LC相关联系题
推荐阅读:
- 《北美IT企业fulltime薪资大曝光》
- 《IT 简历模板大放送 | 《如何写好技术简历》讲座精华总结》
- 《offer收割机的求职秘诀 | <如何成为offer达人>讲座精华总结》
- 《Google offer 如何谈判?听听 Google recruiter 怎么说!》
- 《面试遇到做过的题怎么办?》
- 《冷冻期大揭秘 | Google、FB、Amazon、Linkedin冷冻期》
- 《面试前如何了解一家IT企业?试试官方技术博客!》
- 《北美IT企业intern薪资大曝光》
- 《16个behavior question 的面试官解析及tips》
- 《Google晋升机制 | 大公司如何升级打怪, 获得晋升?》
欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等
