尋找陣列a的和最大的非空連續子陣列。例如:陣列 a = 的和最大的連續子陣列為,最大和為43,所以就是a的最大子陣列; 陣列的最大子陣列為。
採用分治策略:將陣列分為兩個規模相等的子陣列,分別求子陣列的最大子陣列,以及跨越中點的最大子陣列,然後將左子陣列、右子陣列、跨越中點三種情況的最大子陣列比較取最大值。
public
class
maxmunarray
scanner sc = new scanner(system.in);
system.out.println("請輸入一串整數並在輸入時用英文逗號隔開:");
string inputstring = sc.next().tostring();
string stringarray = inputstring.split(",");
int num = new
int[stringarray.length];
for (int i = 0; i < stringarray.length; i++)
subarray max_subarray = find_maximum_subarray(num, 0, num.length - 1);
system.out.println("low:" + max_subarray.low + ", high:" + max_subarray.high + ", sum:" + max_subarray.sum);
}// 查詢最大子陣列
private
static subarray find_maximum_subarray(int arr, int low, int high) else else
if (right.sum >= left.sum && right.sum >= cross.sum) else
return cross;}}
// 查詢包含中點的最大子陣列
private
static subarray find_max_crossing_subarray(int arr, int low, int mid, int high)
}int right_sum = arr[mid + 1];
int max_right = mid + 1;
sum = 0;
for (int i = mid + 1; i <= high; i++)
}return
new subarray(max_left, max_right, left_sum + right_sum);
}private
static
class
subarray
}}
θ(
nlogn)
C 最大子陣列,遞迴實現,分治法
尋找最大子陣列 遞迴.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。遞迴法尋找最大子陣列 include include include include using namespace std 函式只可以return乙個值,如果想返回多值,可以 1 使用結構 struct stru...
python分治法實現最大子陣列問題
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。使用分治法,a low high 的任意連續子陣列a i j 所處的位置必然是以下三種情況之一 a 完全位於子陣列a low mid 中,因此low i j mid b 完全位於子陣列a mid 1 h...
最大子陣列(分治法)
尋找a low,high 中的最大連續子陣列a i,j mid low high 2,欲求的最大連續子陣列出現的位置 1 出現在a low,mid 中 即 low i j mid 2 出現在a mid 1,high 中,即 mid 3 跨越了mid位置,出現在a low,high 中,即 low i...