赞
踩
输入:
8
1 -2 3 10 -4 7 2 -5
输出:
18
说明:
经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
输入:
1
2
输出:
2
输入:
1
-10
输出:
-10
n = int(input())
nums= list(map(int, input().split()))
dp = [0]
if nums[0] > 0:
dp[0] = arr[0]
res = nums[0]
# 算法核心部分
for i in range(1, n):
temp = nums[i] + dp[i - 1]
dp.append(max(temp, nums[i]))
res = max(dp[i], res)
print(res)
n = int(input())
nums = list(map(int, input().split()))
pre = nums[0]
res = nums[0]
for i in range(1, n):
if pre > 0:
pre = pre + nums[i]
else:
pre = nums[i]
res = max(pre, res)
print(res)
输入:
4
3 2 -2 4
输出:
6
说明:
子数组[3,2]的乘积为6,[3,2,-1,4]的乘积为-24,[4]的乘积为4,故返回6
输入:
3
-3 0 -2
输出:
0
说明:
因为0在中间,所有包含0的子数组的乘积都为0,另外的数都是负数,所以最大乘积的子数组为[0],返回为0,因为子数组要求是连续的,所以[-3,-2]不是[-3,0,-2]的子数组,所以不能为6,
输入:
3
-3 2 -2
输出:
12
n = int(input())
nums = list(map(int, input().split()))
res = nums[0]
maxNum, minNum = nums[0], nums[0]
for num in nums[1:]:
n1, n2 = num * maxNum, num * minNum
maxNum = max(n1, n2, num)
minNum = min(n1, n2, num)
res = max(res, maxNum)
print(res)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。