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

2021-08-07 06:57:16 字數 1133 閱讀 4983

最大子陣列,即子陣列中的各個元素相加的和是所有子陣列中最大的。

假設最大子陣列為【ai.......aj】

則必然是以下三種情況:

(1)、完全位於子陣列a【low.........mid】中

(2)、完全位於子陣列a【mid+1.......high】中

(3)、跨越了中點low<=i<=mid<=j<=high

如果暴力求解的話,時間複雜度為:θ(n²):

int find_max_subarray(int *arr, int len) 

}return max_sum;

}

如果用分治法的話,將會簡單很多,時間複雜度為:o(nlgn)

**如下:

package lianxi;

public class max_ziarray

for(int j=mid-1;j>=0;j--)

sum=left_sum+right_sum;

return sum;

}public static int maxium_subbary(int nums,int low,int high)

}public static void main(string args)

; int low=0;

int high=nums.length-1;

int max;

max=maxium_subbary(nums, low, high);

system.out.println(max);

}}

輸出結果為:43

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

問題 乙個整數陣列中的元素有正有負,在該陣列中找出乙個連續子陣列,要求該連續子陣列中各元素的和最大,這個連續子陣列便被稱作最大連續子陣列。比如陣列的最大連續子陣列為,最大連續子陣列的和為5 2 1 2 8。一 暴力解法 include using namespace std class soluti...

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

問題 乙個整數陣列中的元素有正有負,在該陣列中找出乙個連續子陣列,要求該連續子陣列中各元素的和最大,這個連續子陣列便被稱作最大連續子陣列。比如陣列的最大連續子陣列為,最大連續子陣列的和為5 2 1 2 8。一 暴力解法 include using namespace std class soluti...

分治策略之最大子陣列

分治策略是將父問題差分成的多個子問題,然後遞迴的方式解決子問題。整個思想和動態規劃類似,不過分治策略不要求最優解問題,而只是把父問題分解成子問題。步驟 分解 divide 先將問題劃分成子問題。子問題的形式與原問題相同。解決 conquer 遞迴解決問題,當問題縮小到一定程度就能夠直接求解。合併 c...