1. 程式人生 > >[滴滴校招] 連續最大和

[滴滴校招] 連續最大和

題目:一個數組有 N 個元素,求連續子陣列的最大和。 例如:[-1,2,1],和最大的連續子陣列為[2,1],其和為 3
輸入描述:
輸入為兩行。
第一行一個整數n(1 <= n <= 100000),表示一共有n個元素
第二行為n個數,即每個元素,每個整數都在32位int範圍內。以空格分隔。

輸出描述:
所有連續子陣列中和最大的值。

輸入例子:
3
-1 2 1
輸出例子:
3
思路:最大連續子段和是經典的動態規劃入門題目,網上參考資料很多。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector> using namespace std; const int maxn = 100010; int work(vector<int> myArray) { int f[maxn]; int Size = myArray.size(); f[0] = myArray[0]; for(int i = 1; i < Size; i++) { f[i] = max(f[i-1]+myArray[i], myArray[i]); } int
maxValue = f[0]; for(int i = 1; i < Size; i++) { if(maxValue < f[i]) { maxValue = f[i]; } } return maxValue; } int main() { int n, read; vector<int> myArray; scanf("%d", &n); for(int i = 0
; i < n; i++) { scanf("%d", &read); myArray.push_back(read); } if(n == 1) { printf("%d\n", myArray[0]); } else { int result = work(myArray); printf("%d\n", result); } return 0; }