您的位置:首页 > 编程语言 > Java开发

最大子数组—— Java -分治策略

2015-03-19 17:10 302 查看
public class FindMaxSubarray

{

public static int findMaxCrossingSubarray(int[] a, int low, int mid, int high)

{

int left_sum = 0, right_sum = 0;

int sum = 0;

for (int i = mid; i >= 0; --i)

{

sum += a[i];

if (sum > left_sum)

{

left_sum = sum;

}

}

sum = 0;

for (int j = mid + 1; j <= high; ++j)

{

sum += a[j];

if (sum > right_sum)

{

right_sum = sum;

}

}

return left_sum + right_sum;

}

public static int findMaximumSubarray(int[] a, int low, int high)

{

int mid = 0;

int leftSum = 0, rightSum = 0, crossSum = 0;

if (high == low)

{

return a[low];

}

else

{

mid = low + (high - low) / 2;

leftSum = findMaximumSubarray(a, low, mid);

rightSum = findMaximumSubarray(a, mid + 1, high);

crossSum = findMaxCrossingSubarray(a, low, mid, high);

if (leftSum >= rightSum && leftSum >= crossSum)

{

return leftSum;

}

else if (rightSum >= leftSum && rightSum >= crossSum)

{

return rightSum;

}

else

return crossSum;

}

}

public static void main(String[] args)

{



int[] a = {13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7};

int sum = findMaximumSubarray(a, 0, a.length - 1);

System.out.println(sum);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: