專欄 | 九章演算法
網址 | 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)。
精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等