最大子数组—— Java -分治策略
来源:互联网 发布:mac 移动硬盘重新分区 编辑:程序博客网 时间:2024/06/06 04:24
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);
}
}
{
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);
}
}
0 0
- 最大子数组—— Java -分治策略
- 分治策略——最大子数组问题
- 最大子数组----分治策略
- 算法学习(一)——分治策略之最大子数组问题(Java实现)
- 算法导论,分治策略,最大子数组
- 用分治策略求最大子数组
- 分治策略之最大子数组问题
- 【分治策略】最大子数组问题
- 分治策略求解最大子数组问题
- 分治策略之最大子数组问题
- 分治策略之最大子数组
- 分治策略求最大子数组
- 分治策略-最大子数组问题
- 分治策略之最大子数组问题
- 分治策略 | 最大子数组问题
- 分治策略之最大子数组问题
- 分治策略之最大子数组问题
- 分治策略 & 最大子数组的问题
- js,判断字符串长度
- 黑马程序员——Object-C基础(十)
- 可视化分析之路之二——从数据到图的苦恼
- adb log 获取总结
- HTML中value与innerHTML、document.write的区别
- 最大子数组—— Java -分治策略
- 将APK文件重新签名
- STL源码:内存基本处理工具
- GDUT决赛 游戏王
- WCF 已超过传入消息(65536)的最大消息大小配额 解决方案
- Android Volley完全解析(二),使用Volley加载网络图片
- linker error CXtpAccessible
- 购买二手房时要注意的违约责任有哪些
- BST中序遍历(Iterative)