题目要求:思路:虽然题中给出的是循环的,但首先想到的肯定是从头遍历到尾,然后再遍历这道题,求所有元素之和,最大子序列和,和ThesmallestsubsequenceSequencesum如果sum小于0且等于最小子序列和,则表示数组元素全为负,返回最大子序列和。如果不是以上情况,相比较,如果sum-最小子序列和>最大子序列和,说明数组首尾都存在最大子序列和,则返回sum-最小子序列和,否则返回最大子序列和核心代码:#定义五个值,分别是临时最大子串和和临时最小子串和,全局最小子串和,全局最大子串和和数组所有元素的和localmax=A[0]localmin=A[0]finalmin=A[0]finalmax=A[0]summ=A[0]#因为五个值的初值都赋给了A[0],所以从下标1开始遍历foriinrange(1,len(A)):#summ加上当前值summ+=A[i]#如果当前值加上临时最大子串和大于当前值,则添加当前值加上临时最大子串总和为临时最大子串总和iflocalmax+A[i]>A[i]:localmax+=A[i]#如果没有当前值那么大,说明当前值为临时最大子串else:localmax=A[i]#比较当前最大值substring和全局最大子串sum中较大的赋给全局最大子串sumfinalmax=max(localmax,finalmax)#最小子串sum相同iflocalmin+A[i]A[i]:localmax+=A[i]else:localmax=A[i]finalmax=max(localmax,finalmax)iflocalmin+A[i]
