這是一道線性動態規劃,當前的狀態只與特定數量的前邊狀態相關。
狀態的定義:
dp[i] : 小偷偷到第i間房時,偷到的最大金額為dp[i]
狀態轉移方程:
dp[i] = max(dp[i-1], dp[i-2]+nums[i])
初始狀態:
dp[0] = 0
dp[1] = nums[0]
直接使用dp陣列的,沒有進行空間優化
class solution
vectordp(n+1, 0);
dp[0] = 0;
dp[1] = nums[0];
for(int i = 2; i<=n; i++)
return dp[n];
}};// dp[i] : 小偷偷到第i間房時的最大金額為dp[i]
// dp[i] = max(dp[i-1], dp[i-2]+nums[i])
// dp[0] = nums[i]
當前狀態只和前邊兩個狀態有關,所以我們可以省去dp陣列,開三個變數,分別儲存前兩個狀態,現在的狀態即可
class solution
if(nums.size() == 1)
if(nums.size() == 2)
int dpi_2 = 0;
int dpi_1 = nums[0];
int dpi = 0;
for(int i = 2; i<=nums.size(); i++)
return dpi;
}};
LeetCode 198 打家劫舍
題目 你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。思路 本題的大致意思就是求取乙個...
LeetCode198 打家劫舍
你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。簡單的動態規劃問題,題目意思是計算陣列...
LeetCode198 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...