最大相連子序列和及相應的下標
阿新 • • 發佈:2019-02-04
關於最大子序列和問題,以前已經解決 點選開啟連結
但是並沒有給出具體序列的那些相應的下標,為此,這次作為補充。
我的想法是:
記錄所求序列的索引;
如果thisSum<0,那麼i+1有可能成為 開始下標begin;
從thisSum>maxSum能得出結束下標end;
最後從儲存可能的開始下標陣列中 找到<end的最後一次更新的begin即可。
程式碼如下:
//記錄所求序列的索引 //如果thisSum<0,從下一個開始記錄開始 //從maxSum能得出end //最後找到 &a) { int maxSum = 0, thisSum = 0; vector b{ 0 }; int end = 0, begin = 0; for (int i = 0; i < a.size(); ++i) { thisSum += a[i]; if (thisSum > maxSum) { maxSum = thisSum; end = i; } else if (thisSum <= 0) { thisSum = 0; b.push_back(i+1); } } for (int j = 0; j < b.size(); ++j) { if (b[j] <= end) begin = b[j]; } cout << maxSum << endl; cout << "{" << begin << " , " << end << "}"; }