最大子段和

代码实现如下:

#include<bits/stdc++.h>
using namespace std;
int n;
long long a[50005];
long long sum[5005];
long long MAX=-1;
int main (){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
	for(int i=1;i<=n;i++){
		if(sum[i-1]>0){//若(i-1)位置的sum数组为正,与i位置相加更大 
			sum[i]=sum[i-1]+a[i];
		}
		else{          //若为负,则相加更小,便直接取i位置a数组的值 
			sum[i]=a[i];
		} 
		if(sum[i]>MAX){//若当前位sum>MAX,就为MAX赋sum的值 
			MAX=sum[i];
		} 
	}
	if(MAX<0){
		MAX=0;
	} 
	cout<<MAX;
}

ps:因题目要求为负则为0,故多写一步

sum up:用前缀和的方法记录每个数字之前所有数字的最大和并加以比较

posted @   MegaSam  阅读(11)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示