Uber面試題 | 房屋竊賊 House Robber II

九章演算法發表於2017-08-07

專欄 | 九章演算法
網址 | 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教育領域的深耕者

相關文章