Java分治法實現最大子陣列

2021-08-10 22:12:19 字數 1417 閱讀 3721

尋找陣列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...