按照只算开头一个环形的思路
在这个算例爆了
def getDPmax(numsIn):
if len(numsIn) == 1: return numsIn[0]
dp = [0] * len(numsIn)
dp[0] = numsIn[0]
for i in range(1,len(numsIn)):
if dp[i-1] > 0:
dp[i] = dp[i-1] + numsIn[i]
else:
dp[i] = numsIn[i]
return max(dp)
# 这个环可任意取前n个
ans = []
for i in range(len(nums)):
nums_b = nums[:i]
nums_a = nums[i:]
nums1 = nums_a + nums_b
ans.append(getDPmax(nums1))
return max(ans)
看了大佬的思路
而最大最小的求解:
如果求最小,直接改成min即可
n=len(nums)
max_=float('-inf')
pre=0 #无环
for i in range(n):
pre=max(0,pre)+nums[i]
max_=max(max_,pre)
# 如果最子数组和小于0,说明数组中全为负数,返回最大负数即可
if max_<0:return max_
#有环
pre=0
min_=float('inf')
for i in range(n):
pre=min(0,pre)+nums[i]
min_=min(min_,pre)
return max(max_,sum(nums)-min_)
根据图片求解得到