测试面试题
找到数组或整数列表中连续子序列的最大和
找到数组或整数列表中连续子序列的最大和,并满足以下条件:
- 列表仅由正数组成并且最大和是整个数组的总和。
- 如果列表仅由负数组成,则返回 0
- 空列表被认为具有零最大和
注意:空列表 或 数组 也是有效的子列表/子数组。
假设存在列表: [-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