- def maxSequence(lst):
- if len(lst) == 0:
- print('空列表,返回0')
- return 0
- else:
- sequece = []
- maxSum = -float('inf')
- for i in range(len(lst)):
- for j in range(i+1, len(lst)+1):
- if sum(lst[i:j]) >= maxSum:
- maxSum = sum(lst[i:j])
- if maxSum > 0:
- sequece.append(lst[i:j])
- if maxSum < 0:
- print('最大切片和为负,返回0')
- return 0
- else:
- max_Seq = []
- for i in sequece:
- if sum(i) == maxSum:
- max_Seq.append(i)
- return maxSum,max_Seq # 返回最大和及对应切片
- list1 = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
- list2 = [-6, 21, -4, 19, -27, 22, -19, -27, 2, 20, -16, 26, 5, 13, -14, 22, \
- -17, 23, -7, -8, 3, 26, -11, -28, 15, -21, -6, -22, 24, -2, -29, 28, \
- 22, -6, 17, 4, -29, 3, 8, 2, -18, -1, -9, -23, 9, -18, 17, 15, 23, 29]
- list3 = []
- list4 = [-1,-1,-1,-1]
- list5 = [2,3,4,-1,-100,-1,4,3,2,0, -199, ]
- print(maxSequence(list1))
- print(maxSequence(list2))
- print(maxSequence(list3))
- print(maxSequence(list4))
- print(maxSequence(list5))
- ###
- (6, [[4, -1, 2, 1]])
- (84, [[17, 15, 23, 29]])
- 空列表,返回0
- 0
- 最大切片和为负,返回0
- 0
- (9, [[2, 3, 4], [4, 3, 2], [4, 3, 2, 0]])
- # 笨方法,本质上和楼上的solomonxian 的思路是一样的,不过solomonxian的+[0]很巧妙,一句代码也很简洁。
- def maxS(n):
- return max([sum(n[i:j]) for i in range(len(n)) for j in range(i+1,len(n)+1)]+[0])
- # 学习了
复制代码 |