开篇记录面试第八天

2019-06-03  本文已影响0人  一路不向西

这篇应该是2号的,昨晚忘记写了,今天早上补上。
昨天要记录的是一道题目。

  1. 题目是:给定一个数组,数组中的数字有正有负,求这个数组的连续子数组中和最大的数组,例如[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()
上一篇 下一篇

猜你喜欢

热点阅读