最大子陣列,即子陣列中的各個元素相加的和是所有子陣列中最大的。
假設最大子陣列為【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...