leetcode--198--打家劫舍

題目:
你是一個專業(yè)的小偷,計(jì)劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。

給定一個代表每個房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 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 。

鏈接:https://leetcode-cn.com/problems/house-robber

思路:
1、這道題可以用動態(tài)規(guī)劃來進(jìn)行解決,假設(shè)用dp來存儲房屋的值,則dp[i]等價于dp[i-2]位置的值加上當(dāng)前房屋i的價值 和 dp[i-1]位置的值中的最大值,即dp[i] = max(dp[i-2]+nums[i], dp[i-1])

Python代碼如下:

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        size = len(nums)
        if size==0:
            return 0
        elif size==1:
            return nums[0]

        dp = []
        for i in range(size):
            item = nums[i]
            if i==0:
                dp.append(item)
            elif i==1:
                dp.append(max(nums[0], nums[1]))
            else:
                imax = max(dp[i-2]+nums[i],dp[i-1])
                dp.append(imax)
        return dp[size-1]
           

C++代碼:

class Solution {
public:
    int rob(vector<int>& nums) {
        int size = nums.size();
        if (size==0) return 0;
        if (size==1) return nums[0];
        if (size==2) return max(nums[0],nums[1]);

        vector<int> dp;
        for (int i=0; i<size; i++){
            if (i==0){
                dp.push_back(nums[0]);
            }else if(i==1){
                dp.push_back(max(nums[0], nums[1]));
            }else{
                int item = max(dp[i-2]+nums[i], dp[i-1]);
                dp.push_back(item);
            }
        }
        return dp[size-1];
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容