問題描述,給定乙個陣列a[0,1,...,n-1],求出a的連續陣列,使得該子陣列的和最大。
例如:陣列a[1,-2,3,10,-4,7,2],則最大的子陣列為[3,10,-4,7,2]
解法:
1.暴力法
2.分治法
3.動態規劃法
一:暴力發
分析:直接求解a[i,...,j]的值,0<=i<=n;i<=j<=n,i,i+1,...,j-1的最大長度為n,時間複雜度為o(n^3)。
**分析:
int maxsubarray_baoli(int a, int n)
if (currentsum > maxsum)
} }return maxsum;
}
二:分治法
分析:
(1)將陣列從中間分開,那麼最大子陣列要麼完全在左邊陣列,要麼完全在右邊陣列,要麼跨立在分界點上,僅此 三種情況。
(2)完全在左邊陣列或者右邊陣列時候,可以使用遞迴解決。
(3)跨立在分界點上時,最大子陣列是在左邊陣列的最大字尾和右邊陣列左邊的最大字首之和,因此,從分界點向前和向後掃瞄即可得。演算法時間複雜度可達到o(nlogn).
**分析:
double maxsubarray_fenzhi(int a, int left, int right)
int r_past = a[middle + 1];
now = a[middle + 1];
for (i = middle + 1; i <= right; i++)
double m3 = l_past + r_past;
double temp = max(m1, m2);
return max(temp, m3);
}double max(double x, double y)
3.動態規劃
int maxsubarray_dongtaiguihua(int a, int n)
return result;
}
最大連續子陣列
對於乙個給定的陣列a,求 a中連續子陣列,使得該陣列的和最大 例如 a 1,2,3,10,4,7,2,5 結果 3 10 4 7 2 暴力法 遍歷求a的所有子陣列,求和最大的 分治法 陣列的和最大那個陣列只會出現在以下三種情況中 a.存在於陣列下標從0到mid中,其中mid為陣列長度 length ...
最大連續子陣列
題目 給乙個陣列,返回它的最大連續子串行的和 子向量的長度至少是1 例如 連續子向量的最大和為8 從第0個開始,到第3個為止 使用動態規劃 f i 以array i 為末尾元素的子陣列的和的最大值,子陣列的元素的相對位置不變 f i max f i 1 array i array i res 所有子...
最大連續子陣列和
題目描述 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值,要求時間複雜度為o n 例如輸入的陣列為 1,2,3,10,4,7,2,5 和最大的子陣列為 3,10,4,7,2 因此輸出為該子陣列的和18。思路 採用貪婪法...