問題:乙個整數陣列中的元素有正有負,在該陣列中找出乙個連續子陣列,要求該連續子陣列中各元素的和最大,這個連續子陣列便被稱作最大連續子陣列。比如陣列的最大連續子陣列為,最大連續子陣列的和為5+2-1+2=8。
一、暴力解法:
#include
using namespace std;
class
solution}}
return
sum;}};
int main()
; solution s1;
cout << s1.find_maxmum_subarray(a, 9);
system("pause");
}
二、分治解法:
#include
using namespace std;
class
solution
else
if (rightmax >= leftmax&&rightmax >= crossmax)
else
return crossmax;}}
int findcross(int a,int low,int high)
}sum = 0;
for (int i = mid + 1; i <=high; i++)
}return left_sum + right_sum;
}};int main()
; solution s1;
cout<0,8);
system("pause");
}
三 、線性解法:
#include
/*@author zsj
*/using namespace std;
int find(int a, int
length)
}
分治策略之最大子陣列問題
最大子陣列,即子陣列中的各個元素相加的和是所有子陣列中最大的。假設最大子陣列為 ai.aj 則必然是以下三種情況 1 完全位於子陣列a low.mid 中 2 完全位於子陣列a mid 1.high 中 3 跨越了中點low i mid j high 如果暴力求解的話,時間複雜度為 n int fi...
分治策略之最大子陣列問題
問題 乙個整數陣列中的元素有正有負,在該陣列中找出乙個連續子陣列,要求該連續子陣列中各元素的和最大,這個連續子陣列便被稱作最大連續子陣列。比如陣列的最大連續子陣列為,最大連續子陣列的和為5 2 1 2 8。一 暴力解法 include using namespace std class soluti...
分治策略之最大子陣列
分治策略是將父問題差分成的多個子問題,然後遞迴的方式解決子問題。整個思想和動態規劃類似,不過分治策略不要求最優解問題,而只是把父問題分解成子問題。步驟 分解 divide 先將問題劃分成子問題。子問題的形式與原問題相同。解決 conquer 遞迴解決問題,當問題縮小到一定程度就能夠直接求解。合併 c...