NC235948. 最大子串和
描述
给你一个数组 ,包含 个整数,你需要在其中选择连续的几个(至少一个)数,使得它们的和最大,求出最大的和。
输入描述
第一行输入一个正整数 ,表示数组 大小。
第二行输入 个整数 ,表示数组 。
输出描述
输出一行,一个整数,表示最大字串和。
示例1
输入:
6 1 -2 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)