最大子陣列和

2021-06-01 10:14:23 字數 1122 閱讀 1524

問題描述:

給定乙個整數陣列a[0~n],求陣列a的子陣列,使其元素和為最大。

問題分析:

方法一:可以用普通的方法列舉所有的子陣列,然後求出最大的子陣列和,時間複雜度為o(n*n)。

方法二:問題描述符合動態規劃最優子結構的要求。

設b[i]表示以a[i]結尾的子陣列的最大子段和,即:

b[i]=max,其中0<=j<=i,j<=k<=i。

因此對於陣列a[0~n]的最大欄位和為max,其中0<=i在計算b[i]時,可以考慮以下三種情況:

1,b[i] = b[i-1]+a[i],當b[i-1]>0時,這時候的b[i]中包含a[i]。

2,b[i] = a[i],當b[i-1]<=0,這時候以a[i]重新作為b[i]的起點。

3,b[i]不包含a[i]的情況,這種情況在計算b[i]之前已經計算處結果,儲存在b[0~i-1]中。最後計算max時會考慮到。

b[i] = max。

而陣列a[0~n]則為max。

在實現時,可以省略陣列b[i]。實現如下:

view plain

print?

1 #include 

2 using

namespace std;  

3 #define n 10   

4 int max_sub_array(int &s,int &e,int * a)  

5   

19                 else

20                   

24                 if(sum25                   

30         }  

31         return sum;  

32 }  

33 int main()  

34 ;  

36         int start,end;  

37         int sum = max_sub_array(start,end,a);  

38         cout << sum << "  "

<" "

<39 }  

最大子陣列和

給定乙個陣列 求出陣列的最大子陣列和 其中包含正,負 和0 很簡單把每個子陣列的和求出來話不多說看 方法1暴力求解法 把所有的子陣列都求解出來o n2 public static intgetmaxsubarr int arr return res 第二種方法 dp求解 很簡單理解加上當前的數arr...

最大子陣列和

使用動態規劃 f i 以array i 為末尾元素的子陣列的和的最大值,子陣列的元素的相對位置不變 f i max f i 1 array i array i res 所有子陣列的和的最大值 res max res,f i 如陣列 6,3,2,7,15,1,2,2 初始狀態 f 0 6 res 6 ...

最大子陣列和

leetcode 給你乙個整數陣列 nums 請你找出乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。子陣列 是陣列中的乙個連續部分。示例 1 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6 示例 2 輸入 nums...