leetcode演算法練習 打家劫舍

2021-10-04 23:35:15 字數 1266 閱讀 6482

題目:

打家劫舍

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 1:

輸入: [1,2,3,1]

輸出: 4

解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。

偷竊到的最高金額 = 1 + 3 = 4 。

示例 2:

輸入: [2,7,9,3,1]

輸出: 12

解釋: 偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。

偷竊到的最高金額 = 2 + 9 + 1 = 12 。

思路:

定義兩個變數乙個存放left和right,right存放最大值,left存放第二大的值,當指標的數加上left大於right時,則將right值與left值相交換,然後right再加上指標的值。如果指標的數加上left不大於right時則將right值賦給left。

**:

int

rob(

int* nums,

int numssize)

if(numssize==1)

int max=0;

max=nums[0]

>nums[1]

?nums[0]

:nums[1]

;if(numssize==2)

int left=nums[0]

,right=max,swap;

for(

int i=

2;i)else

left=right;

}return right;

}

leetcode標準答案:

int

rob(

int* nums,

int numssize)

a = nums[0]

; b = nums[0]

> nums[1]

? nums[0]

: nums[1]

;for

(int i =

2; i < numssize; i++

)return b;

}

LeetCode 198 打家劫舍

題目 你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。思路 本題的大致意思就是求取乙個...

LeetCode198 打家劫舍

你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。簡單的動態規劃問題,題目意思是計算陣列...

leetcode198 213 打家劫舍

解題思路 先畫樹形結構去分析,x,n 表示考慮從x到n範圍內去偷盜,memo x,n 表示x到n範圍內偷盜金額的最大值。def rob 198 nums if len nums 0 return 0 if len nums 1 return nums 0 if len nums 2 return m...