最大字段和
阿新 • • 發佈:2019-03-09
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;View Codeint 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; }
最大字段和