連續子序列的最大和
阿新 • • 發佈:2018-11-07
分析: 每次都對前i-1項的最大和sum進行判斷,如果sum < 0;
則a[i] 肯定大於a[i] + sum的和,這時執行 sum = a[i],否則執行sum += a[i];
但是這時還並不知道max和sum誰更大,故執行
max = max > sum ? max : sum;
#include <bits/stdc++.h> using namespace std; int maxSum( vector<int>&b,int n); int main() { int tmp; vector<int> a; char ch; while (cin >> tmp) { a.push_back(tmp); if ((ch = getchar())== '\n')//遇到enter就結束 break; } //以上是為了給陣列賦值 int max = maxSum(a,a.size()); cout << max; return 0; } int maxSum( vector<int>&b,int n) { int max = b[0]; int tmpMax = b[0]; for(int i = 0; i < n; i++) { if(tmpMax > 0) tmpMax += b[i]; //如果前(i)項的和為正數,則加上 else tmpMax = b[i]; //到現在為止並不知道前 (i)項的和與前i項的和那個大 max = max > tmpMax ? max : tmpMax; } return max; }
另一個更精簡的程式碼
int MaxSubsequenceSum( const int A[ ], int N ) { int ThisSum, MaxSum; ThisSum = MaxSum = A[0]; for(int j = 1; j < N; j++ ) { ThisSum = (ThisSum+A[j]) > A[j] ? (ThisSum+A[j]) :A[j]; MaxSum = MaxSum > ThisSum ? MaxSum : ThisSum; } return MaxSum; }