1. 程式人生 > >最大相連子序列和及相應的下標

最大相連子序列和及相應的下標

關於最大子序列和問題,以前已經解決    點選開啟連結

但是並沒有給出具體序列的那些相應的下標,為此,這次作為補充

我的想法是:

記錄所求序列的索引;

如果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 << "}";
}