分治法求最大子数组问题
2016-09-11 20:14
190 查看
1.思想:将数组分治为三部分来进行求解:以中间为划分,最大字数组可能在左半部分,也可能在右半部分,也可能跨越中间。
2.参考算法导论,实现用java代码:
public class FenzhiArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
int []arr={-6,4,-3,2,5,-6,9,-8};
max(arr,0,arr.length/2,arr.length-1);
}
static void max(int []arr, int low, int mid, int high) {
int sum = 0;
//左侧的最大值为中间的数
int left_sum = arr[mid];
//求和的数
sum = 0;
int left_index=0;
//从中间往两边走
for (int i = mid; i >= low; i--) {
sum += arr[i];
if (sum > left_sum)
{left_sum = sum;
left_index=i;}
}
//求右侧的最大
int right_index=0;
int right_sum = arr[mid + 1];
sum = 0;
for (int j= mid + 1; j<= high; j++) {
sum += arr[j];
if (sum > right_sum)
{right_sum = sum;
right_index=j;}
}
System.out.println("左边的索引为"+left_index);
System.out.println("左边的索引为"+right_index);
System.out.println("最大值为:"+(left_sum+right_sum));
printArr(arr,left_index,right_index);
}
//为了打印数组的元素
static void printArr(int []arr,int startIndex, int endIndex)
{
for (int i = startIndex; i <= endInd
4000
ex; i++)
{
System.out.print(arr[i] + " ");
}
}
}
2.参考算法导论,实现用java代码:
public class FenzhiArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
int []arr={-6,4,-3,2,5,-6,9,-8};
max(arr,0,arr.length/2,arr.length-1);
}
static void max(int []arr, int low, int mid, int high) {
int sum = 0;
//左侧的最大值为中间的数
int left_sum = arr[mid];
//求和的数
sum = 0;
int left_index=0;
//从中间往两边走
for (int i = mid; i >= low; i--) {
sum += arr[i];
if (sum > left_sum)
{left_sum = sum;
left_index=i;}
}
//求右侧的最大
int right_index=0;
int right_sum = arr[mid + 1];
sum = 0;
for (int j= mid + 1; j<= high; j++) {
sum += arr[j];
if (sum > right_sum)
{right_sum = sum;
right_index=j;}
}
System.out.println("左边的索引为"+left_index);
System.out.println("左边的索引为"+right_index);
System.out.println("最大值为:"+(left_sum+right_sum));
printArr(arr,left_index,right_index);
}
//为了打印数组的元素
static void printArr(int []arr,int startIndex, int endIndex)
{
for (int i = startIndex; i <= endInd
4000
ex; i++)
{
System.out.print(arr[i] + " ");
}
}
}
相关文章推荐
- 最大子数组问题--分治法的思想
- 分治法之最大子数组问题
- 算法导论——分治法——最大子数组问题
- 分治法求解最大子数组问题
- 分治法解决寻找数组中最大最小值的问题
- 分治法解决最大子数组问题
- 分治法求解最大子数组问题
- 最大子数组问题分治法(递归)Java实现
- 分治法求解最大子数组问题
- 求解最大子数组问题 -- 暴力求解 和 分治法求解
- c#数据结构之最大子数组问题(分治法)
- 最大子数组问题的三种方法:分治法、暴力法和非递归方法
- 运用分治法和动态规划方法求解最大子数组问题
- 4.1 最大子数组问题(分治法)-NlogN
- 分治法解决最大子数组问题 (C/C++)
- 最大子数组问题(分治法)--【算法导论】
- 分治法解决最大子数组问题
- 数组分段和最大值最小问题
- 数组最大差值问题
- 分治法求最大最小元问题