列表

详情


NC235948. 最大子串和

描述

给你一个数组 a ,包含 n 个整数,你需要在其中选择连续的几个(至少一个)数,使得它们的和最大,求出最大的和。


输入描述

第一行输入一个正整数  ,表示数组 a 大小。

第二行输入 n 个整数  ,表示数组 a 。

输出描述

输出一行,一个整数,表示最大字串和。

示例1

输入:

6
1 -2 5 2 -3 5

输出:

9

说明:

你可以选择区间[3,6]的子串,他们的和为5+2-3+5=9

示例2

输入:

8
-3 2 -3 2 2 -1 3 -2

输出:

6

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 133ms, 内存消耗: 3944K, 提交时间: 2023-06-12 02:32:14

int main()
{
    int a[1000010],i=0,n;
    long long m=0,max=0;
    scanf("%d",&n);
    for (;i<n;i++){
        scanf("%d",&a[i]);
    }
    for (i=0;i<n;i++){
        m+=a[i];
        if (m<0) m=0;
        if (m>max) max=m;
    }
    printf("%lld",max);
}

C++ 解法, 执行用时: 307ms, 内存消耗: 476K, 提交时间: 2022-06-21 08:10:01

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n,s=0,m,imax=INT_MIN;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>m;
		s+=m;
		if(s<0) s=0;
		imax=max(imax,s);
	}
	cout<<imax;
	return 0;
}

Python3 解法, 执行用时: 1327ms, 内存消耗: 111836K, 提交时间: 2023-05-25 20:19:20

n = int(input())
arr = list(map(int, input().split()))
res = arr[0]
dp = arr[0]
for i in range(1, n):
    dp = max(dp+arr[i], 0)
    res = max(dp, res)
    
print(res)

上一题