Uber面试题 | 房屋窃贼 House Robber II

539 阅读2分钟

专栏 | 九章算法
网址 | 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的序列做一次动态规划,取较大值就可。

参考程序

www.jiuzhang.com/solutions/h…

面试官角度分析

本题是一个follow up,在解决robber-i的情况下,对于环的特殊性给出解决方法,实现O(n)算法可以达到hire。

LC相关联系题

lintcode.com/problems/ho…


推荐阅读:



欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

九章算法,IT教育领域的深耕者
九章算法,IT教育领域的深耕者