这篇应该是2号的,昨晚忘记写了,今天早上补上。
昨天要记录的是一道题目。
- 题目是:给定一个数组,数组中的数字有正有负,求这个数组的连续子数组中和最大的数组,例如[1, 4, -5, 9, 8, 3, -6],和最大的就是[9,8,3],和为20。
代码如下:
def GetMaxAddOfArray(lists, length):
if lists == [] or length < 1:
return "not lists"
# sum 当前的和
sum = lists[0]
max = lists[0]
left = 0
right = 0
# 到i之前的sum,如果小于等于0,就从i位置开始重新计算,
# 否则继续加上i位置的数
# 如果sum大于max就更新max
for i in range(1, length):
if sum <= 0:
sum = lists[i]
left = i
right = i
else:
sum = sum + lists[i]
right += 1
if sum > max:
max = sum
return max, left, right
def main():
array = [1, 4, -5, 9, 8, 3, -6]
sz = len(array)
max, left, right = GetMaxAddOfArray(array, sz)
print(max, left, right)
return 0
main()
网友评论