思路:既然头尾不能同时取,那就分别算只取头或者只取尾,不考虑特殊情况的话是一个简单的动态规划
class Solution:
def rob(self, nums: list[int]) -> int:
if len(nums) <= 3:
return max(nums)
max_sum = [nums[0], max(nums[1], nums[0])]
for i in range(2, len(nums)-1):
max_sum.append(max(max_sum[i - 2] + nums[i], max_sum[i - 1]))
sum1=max_sum[-1]
nums.pop(0)
max_sum = [nums[0], max(nums[1], nums[0])]
for i in range(2, len(nums)):
max_sum.append(max(max_sum[i - 2] + nums[i], max_sum[i - 1]))
sum2=max_sum[-1]
print(sum1,sum2)
return max(sum1,sum2)