題目:
一個數組有 N 個元素,求連續子數組的最大和。 例如:[-1,2,1],和最大的連續子數組爲[2,1],其和爲 3
解題思路:
方案一:可以使用暴力求解的方式,直接用兩層for循環來解決問題,是一個O(n^2)的算法
方案二:從頭開始遍歷數組,每遍歷一個元素sum+=array[i],若此時sum<array[i],就說明從array[i]開始的子數組的和大於前面的子數組的和,所以令sum=array[i]. 還不能遺漏最大和的判斷和更新。
代碼實現:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.empty())
return 0;
int cursum = array[0];
int maxsum = cursum;
int size = array.size();
int i = 1;
for(; i < size; ++i)
{
cursum += array[i];
if(cursum < array[i])
cursum = array[i];
if(cursum > maxsum)
maxsum = cursum;
}
return maxsum;
}