道路標識198.House Robber


質問する


You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security systems connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.

に答える


この問題は泥棒が盗むことができる最大の金額の問題で、隣の人が盗むことができないという条件が付いています.
したがって,リストを順次検索しながら,そのインデックスの最大値を求めることができる.
DPの問題です.
  • dp[n]の最大値はnums[n]+=nums[n−2]+nums[n−3]である.つまり、隣がだめなのは、1つまたは2つのブロック以外の昔の家から来たことを意味します.
  • 私はずっとDP問題をリストに並べています.しかし、調べてみるとDict(Python 3.7以降)collectionsが使われていることが多い.OrderedDict(3.6以下)
  • を使用することも多い

    コード#コード#

    class Solution:
        def rob(self, nums: List[int]) -> int:
            
            
            for i in range(2, len(nums)):
                if i ==2:
                    nums[2] += nums[0]
                    continue
                nums[i] += max(nums[i-2], nums[i-3])
            return max(nums)