『测试』找到数组或整数列表中连续子序列的最大和

118 阅读1分钟

测试面试题

找到数组或整数列表中连续子序列的最大和

找到数组或整数列表中连续子序列的最大和,并满足以下条件:

  1. 列表仅由正数组成并且最大和是整个数组的总和。
  2. 如果列表仅由负数组成,则返回 0
  3. 空列表被认为具有零最大和

注意:空列表数组 也是有效的子列表/子数组。

假设存在列表: [-2, 1, -3, 4, -1, 2, 1, -5, 4] 那么它的输出项应为:6:[4, -1, 2, 1]

本文使用的是 Python 进行解题,其他同学可使用其他语言进行尝试~~

解题方法1:

def max_sequence(arr):
    max_list = []
    n, num = len(arr), 0                        # 获取列表长度
    max_n = max(arr) if len(arr) != 0 else 0    # 判断列表内数据是否全部是负数
	
	# 判断列表和
    if n == 0 or max_n <= 0:
        return 0
    else:
        while n != 0:
            for i in arr:
                num += i
                max_list.append(num)
            num = 0
            arr.pop(0)
            n = len(arr)

    return max(max_list)
    
lists = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_sequence(lists))

解题方法2:

def max_sequence(arr):
    max1, curr = 0, 0
    for x in arr:
        curr += x
        if curr < 0:
            curr = 0
        if curr > max1:
            max1 = curr
    return max1
    
lists = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_sequence(lists))

解题方法3:

def max_sequence(arr):
    max_l = 0
    max_g = 0
    for n in arr:
        max_l = max(0, max_l + n)
        max_g = max(max_g, max_l)
    return max_g