最大子数组--线性非递归实现
2017-11-08 13:21
363 查看
public MaxRange MaxRangeSonArray(int[] array){ int maxStart=0,maxEnd=0; int sumMax=array[0]; for (int i=1;i<array.length;i++){ int sum=sumMax; for (int k=maxEnd+1;k<=i;k++){ sum+=array[k]; } if (sum>sumMax){ sumMax=sum; maxEnd=i; } sum=0; int rightToLeft=maxStart; for (int j=i;j>=maxStart;j--){ sum+=array[j]; if (sum>sumMax){ maxEnd=i; rightToLeft=j; sumMax=sum; } } maxStart=rightToLeft; } return new MaxRange(sumMax,maxStart,maxEnd); }
class MaxRange{ int start; int end; int sum; public MaxRange(int max, int maxLeftIndex, int maxRightIndex) { this.start=maxLeftIndex; this.end=maxRightIndex; this.sum=max; } }
public static void main(String[] args) { Suanfa1 s= new Suanfa1(); Random random=new Random(); int array[]=new int[8]; for (int i=0;i<array.length;i++){ int rand=random.nextInt(1000); rand=random.nextInt(2)==0?rand*-1:rand; array[i]=rand; } for (int a:array){ System.out.print(a+"__"); } System.out.println("------------"); MaxRange maxRange=s.findMaxMumSubArray(array,0,array.length-1);//递归实现 MaxRange maxRange1=s.MaxRangeSonArray(array);//非递归实现 for (int i=maxRange.start;i<=maxRange.end;i++){ System.out.print(array[i]+"__"); } System.out.println(); for (int i=maxRange1.start;i<=maxRange1.end;i++){ System.out.print(array[i]+"__"); } } 运行结果: -65__-881__565__-871__131__-686__-581__79__------------ 565__ 565__ -58__926__339__-611__-599__194__986__453__------------ 926__339__-611__-599__194__986__453__ 926__339__-611__-599__194__986__453__ 364,680,-228,612,760,-855,-482,135,------------ 364,680,-228,612,760, 364,680,-228,612,760,
相关文章推荐
- C++用递归方式实现在对不更改随机数组的情况下查找最大值
- 算法导论-最大子数组问题-线性时间复杂度算法分析与实现
- 算法导论4.1-3~4.1-5最大子数组暴力算法和递归算法的实现和线性时间算法实现
- 最大子数组之和(线性时间复杂度,C语言实现)
- 用递归二分法实现同时获得一个数组内的最大最小值
- 最大子数组的递归实现
- JAVA 采用递归方式实现求数组最大值
- 算法导论第四章:最大子数组—递归,暴力和线性算法
- 算法导论 4.1-5 最大子数组问题 线性时间算法 C++简单实现
- 使用递归求数组最大值(java实现)
- 求一个整数数组的最大元素,用递归方法实现
- 最大子数组问题分治法(递归)Java实现
- 递归实现数组求最大值_INTEL2014笔
- 东软一道递归题实现数组前K个元素的最大值
- 最大子数组问题的递归和非递归(线性时间)代码
- 求一个整数数组的最大元素,用递归方法实现
- 递归求解数组中的最大值
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- java递归求数组最大值
- 最大子数组问题-c++代码实现及运行实例结果