牛客 連續子陣列和最大

2021-09-27 08:28:45 字數 1687 閱讀 9249

題目描述:求乙個陣列中子陣列的和最大

演算法描述

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個開始,到第...