1. 程式人生 > >最大字段和

最大字段和

sum space 結果 onclick alt 最終 using 遍歷 數組

算法步驟

1、用 cur 維護當前和 (初始化為0),用 res 保存最終結果 (初始化為 -inf),用 temp 維護開始的位置

2、遍歷 a 數組,cur+=a[i] ,如果 cur < 0,則 cur=0 ,temp=i+1從新開始

3、如果 cur>res,更新res=cur,l=temp,r=i

技術分享圖片
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100010;
const int inf = 0x7fffffff;

int n,l,r;
int a[maxn]; long long maxSum(){ long long cur = 0,res=-inf; int temp = 1; for (int i = 1; i <= n; i++){ cur += 1ll*a[i]; if (cur > res){ res = cur; l = temp; r = i; } if (cur < 0){ cur = 0; temp
= i + 1; } } return res; } int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; cout << maxSum()<<" "; cout<< l <<" "<< r << endl; return 0; }
View Code

最大字段和