算法分析之最大子段求和(二)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> using namespace std; int MaxSubSum( int n, int a[], int &besti, int &bestj){ int sum =0,b=0; int j; for (j=0;j<n;j++){ b+=a[j]; if (b<0){ b=0; besti=j+1; //一旦b<0,抛弃前面的结果,把j的下一个位置记录下来 bestj=j+1; } if (b>sum){ sum=b; bestj=j; //bestj跟着sum更新而更新 } } return sum; } int main(){ int besti,bestj; besti=bestj=0; int a[5]={-2,-1,3,2,-1}; cout<< "最大字段和:" <<MaxSubSum(5,a,besti,bestj)<<endl; cout<< "起始位置:" <<besti<<endl; cout<< "结束位置:" <<bestj<<endl; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步