题解 | 最大子段和
最大子段和
https://www.nowcoder.com/practice/f04519cd1d904f50b68f4229a126ab08
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int []s = new int[a];
long dp[] = new long[a];
long m = 0;
int i,j;
for (i = 0; i < a; i++) {
s[i] = in.nextInt();
}
dp[0] = s[0];
m=s[0];
for (j = 1; j < s.length; j++) {
if(dp[j-1]<0){
dp[j]=s[j]>s[j-1]?s[j]:s[j-1];
m=m>dp[j]?m:dp[j];
}else{
dp[j]=dp[j-1]+s[j];
m=m>dp[j]?m:dp[j];
}
}
System.out.print(m);
}
}
dp[j]:1到j的最大序列和
两种情况:
dp[j-1]>0,那么dp[j]=dp[j-1]+s[j]
dp[j-1]<0,那么dp[j]=s[j];如果s[j]也<0,那么dp[j]=s[j]>s[j-1]?s[j]:s[j-1];
用m存储最大值
查看15道真题和解析