分治策略之最大子陣列問題

2021-08-04 19:31:13 字數 990 閱讀 6330

問題:乙個整數陣列中的元素有正有負,在該陣列中找出乙個連續子陣列,要求該連續子陣列中各元素的和最大,這個連續子陣列便被稱作最大連續子陣列。比如陣列的最大連續子陣列為,最大連續子陣列的和為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...