题解 | 最大子段和

最大子段和

https://www.nowcoder.com/practice/f04519cd1d904f50b68f4229a126ab08



import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		long a[]=new long[n];
		for (int i = 0; i < a.length; i++) {
			a[i]=scanner.nextLong();
		}
		long dp[]=new long[n+5];
		//dp[i]表示以a[i]结尾的最大子数组和
		dp[1]=a[0];
		long max=a[0];
		for (int i = 2; i <= n; i++) {
			//要么自成一派,要么加入组织
			dp[i]=Math.max(a[i-1], dp[i-1]+a[i-1]);
			if(dp[i]>max)max=dp[i];
		}
		System.out.println(max);
		

	}

}

把dp[i]设置为以a[i]结尾的最大子段和,那么当考虑a[i]时,要么独自成一组,要么加入之前的子段,如果之前的子段和是正数,那么一般就加入,如果是负数,那么独自一组

全部评论

相关推荐

04-28 15:42
郑州大学 C++
找工作勤劳小蜜蜂:网易这几个月在大面积裁员,外包岗全退,今年网易收缩严重,建议慎重考虑网易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务