最大子段和
代码实现如下:
#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:用前缀和的方法记录每个数字之前所有数字的最大和并加以比较
本文来自博客园,作者:MegaSam,转载请注明原文链接:https://www.cnblogs.com/MegaSamTXL/p/17607153.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】