題目描述:求乙個陣列中子陣列的和最大
演算法描述
1>從第乙個數開始向後累加,每次累加後與前面的和進行比較,儲存較大的值
2>再從第二個元素開始向後累加…
實現**如下
int findgreatestsumofsubarray(const vector&v)
} }return maxsum;
}
由上述**可得到暴力求解法的時間複雜度為o(n^2)
演算法描述
定義兩個變數,乙個變數是計算從陣列第乙個元素開始累加,當累加的元素之和小於0,則重新從當前元素開始累加
另乙個變數是儲存一段元素的最大子段和,與累加的和進行比較,如果累加之和比該段元素這個大,則取累加和,否則該段元素之和不變
實現**如下
int findgreatestsumofsubarray(const vector&v)
else
if (tmpmax < sum)
}return tmpmax;
}
演算法描述
分:與歸併排序的分一致,都是將乙個陣列分成若干組單獨的元素
合:將每兩組元素進行合併,計算各組元素最大連續和以及兩組元素的最大連續和
在計算兩組元素最大和時,取中間向兩邊遍歷 ,取出最大和
同理,可以計算出所有元素的最大子段和
int
dealgreatsum
(const vector<
int>
&v,int begin,
int end)
int mid =
(begin + end)/2
;int leftmax =
dealgreatsum
(v, begin, mid)
;int rightmax =
dealgreatsum
(v, mid+
1, end)
;int corssmax =0;
//兩組元素的最大子段和
int i;
int sum =0;
int tmpmax = v[mid]
;for
(i = mid; i >=begin; i--)}
corssmax +
= tmpmax;
sum =0;
tmpmax = v[mid +1]
;for
(i = mid +
1; i < end; i++)}
corssmax +
= tmpmax;
return
max(
max(leftmax, rightmax)
, corssmax);}
intfindgreatestsumofsubarray
(const vector<
int>
&v)
主函式的**實現
int main()
; cout << findgreatestsumofsubarray(v) << endl;
system("pause");
return 0;
}
牛客 連續子陣列的最大和
連續子陣列的最大和,例如 連續子向量的最大和為8 從第0個開始,到第3個為止 給乙個陣列,返回它的最大連續子串行的和,你會不會被他忽悠住?子向量的長度至少是1 用total記錄累計值,maxsum記錄和最大 基於思想 對於乙個數a,若是a的左邊累計數非負,那麼加上a能使得值不小於a,認為累計值對整體...
牛客網 連續子陣列的最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...
牛客網 連續子陣列的最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...