1. 程式人生 > >最大子陣列問題

最大子陣列問題

假設有一個n長度的陣列, 求陣列中最大的非空子陣列.即子陣列各個元素相加之和最大

思路1

使用分治策略求解, 找到陣列的中間位置mid, 定義兩邊位置為left, right;

在A[left, right] 中 要求解的子陣列必然是以下三種情況之一:

1.最大連續子陣列在 A[left, mid] 的子陣列中

2.最大連續子陣列在 A[mid+1, right] 的子陣列中

3.最大連續子陣列A[i, j]; 包含了A[mid],即 left <= i <= mid <= j <= right.

思路2 

設定DP陣列, DP[i]表示陣列 A[x, i]為當前從[left, i]的最大連續子陣列, left <= x <= i;

當我們把第i+1個元素加入整個陣列中時, 考慮DP[i]是否大於0, 如果是則DP[i+1]=DP[i]+A[i+1];

否則應當捨棄前面相加結果, 重新計算最大連續子陣列即DP[i+1] = A[i+1];

這時演算法時間複雜度為O(n);