|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
输入描述:
输入为两行。
第一行一个整数n(1 <= n <= 100000),表示一共有n个元素
第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。
输出描述:
所有连续子数组中和最大的值。
输入例子:
3
-1 2 1
输出例子:
3
程序:
def maxi(l,n,k,b):
for i in range(n-k+1):
b.append(sum(l[i:i+k]))
import sys
i=0
for line in sys.stdin:
if line.strip()=='':
break
if i==0:
n=int(line)
else:
l=line.split()
l=[int(j) for j in l]
b=[sum(l)]
for s in range(1,n):
maxi(l,n,s,b)
i=i+1
print max(b)
您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为60.00%
计算子串的最大和:Kadane算法
- def calc_max(a):
- b, max_sum = 0, -2147483648
- for i in range(len(a)):
- if b>0:
- b += a[i]
- else:
- b = a[i]
- if b > max_sum:
- max_sum = b
- return max_sum
复制代码
这个算法的时间复杂度是O(n)
|
|