Leetcode 534打劫房屋II python
描述
在上次打劫完一條街道之后,竊賊又發(fā)現(xiàn)了一個(gè)新的可以打劫的地方,但這次所有的房子圍成了一個(gè)圈,這就意味著第一間房子和最后一間房子是挨著的。每個(gè)房子都存放著特定金額的錢(qián)。你面臨的唯一約束條件是:相鄰的房子裝著相互聯(lián)系的防盜系統(tǒng),且 當(dāng)相鄰的兩個(gè)房子同一天被打劫時(shí),該系統(tǒng)會(huì)自動(dòng)報(bào)警。
給定一個(gè)非負(fù)整數(shù)列表,表示每個(gè)房子中存放的錢(qián), 算一算,如果今晚去打劫,在不觸動(dòng)報(bào)警裝置的情況下, 你最多可以得到多少錢(qián) 。
這題是House Robber的擴(kuò)展,只不過(guò)是由直線變成了圈
您在真實(shí)的面試中是否遇到過(guò)這個(gè)題?
樣例
樣例1
輸入: nums = [3,6,4]
輸出: 6
樣例2
輸入: nums = [2,3,2,3]
輸出: 6
思路:
動(dòng)態(tài)規(guī)劃求解
(1)不考慮第一間房子和最后一間房子是挨著的時(shí)
考慮前i項(xiàng)的結(jié)果dp[i]時(shí),
dp[i]為到達(dá)第i個(gè)房間時(shí),得到的最大收益,A為房間錢(qián)數(shù)組。
當(dāng)i = 1, 返回dp[0] = A[0]
當(dāng)i = 2, 返回dp[1] = max(A[0], A[1])
當(dāng)i = 3, 分為偷3號(hào)房屋和不偷3號(hào)房屋,
偷的情況下, 2號(hào)房間就不能偷了,結(jié)果為A[2] + dp[0]
不偷的情況下,結(jié)果為dp[1]
所以返回dp[2] = max(dp[0] + A[2], dp[1])
以此類推,dp[i] = max(dp[i-2] + A[i], dp[i-1])
(2)考慮第一間房子和最后一間房子是挨著時(shí)
區(qū)別在于1號(hào)房屋和最后一號(hào)房屋只能二選一
即把1號(hào)房間舍棄,或者最后一號(hào)房間舍棄。在這兩種情況下選最優(yōu)。
結(jié)果:6
總結(jié)
以上是生活随笔為你收集整理的Leetcode 534打劫房屋II python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 392打劫房屋 pyt
- 下一篇: LeetCode最大子序和 (动态规划)