打劫房屋 II

2021-07-11 12:45:29 字數 989 閱讀 6382

在上次打劫完一條街道之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子圍成了乙個圈,這就意味著第一間房子和最後一間房子是挨著的。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是:相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。

給定乙個非負整數列表,表示每個房子中存放的錢, 算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的情況下。

樣例給出nums =[3,6,4], 返回6, 你不能打劫34所在的房間,因為它們圍成乙個圈,是相鄰的.

解題思路:和這個差不多,一樣是動態規劃。只不過圈起來了。

僅對最後一所房子進行討論,

如果不打劫,和前一篇文章一樣,此時結果為r1 = dp[nums.length - 1][0];

如果打劫,則意味著第一所房子不能打劫,即dp[0][0] = dp[0][1] = 0,這樣重來一次動態規劃,此時的結果為 r2 = dp[nums.length-1][1];

最終結果為max(r1, r2).

**:public class solution {

/*** @param nums: an array of non-negative integers.

* return: the maximum amount of money you can rob tonight

*/public int houserobber2(int nums) {

// write your code here

if(nums==null||nums.length==0)

return 0;

if(nums.length==1)

return nums[0];

int dp = new int[nums.length][2];

dp[0][1] = nums[0];

for(int i=1;i

打劫房屋 II和打劫房屋 III

ii題目 在上次打劫完一條街道之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子圍成了乙個圈,這就意味著第一間房子和最後一間房子是挨著的。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負...

lintcode 打劫房屋

假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的...

打劫房屋 III

在上次打劫完一條街道之後和一圈房屋之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子組成的區域比較奇怪,聰明的竊賊考察地形之後,發現這次的地形是一顆二叉樹。與前兩次偷竊相似的是每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且當相鄰的兩個房子同一天被打...