打家劫舍
1、题目
2、题解
动态规划
设置状态数组,每个位置能抢到的最多钱等于\(max(前一屋能偷到的最多前,再前一屋偷到的最多钱+目前该屋能偷到钱)\)
1 2 3 4 5 6 7 8 9 10
| class Solution: def rob(self, nums: List[int]) -> int: if len(nums)<2: return nums[0] dp = [0]*len(nums) dp[0] = nums[0] dp[1] = max(nums[0],nums[1]) for i in range(2,len(nums)): dp[i] = max(dp[i-1],nums[i]+dp[i-2]) return max(dp)
|
空间优化:用两个指针来记录偷盗的金额
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def rob(self, nums: List[int]) -> int: prev = 0 curr = 0 for i in nums: prev, curr = curr, max(curr, prev + i)
return curr
|