最基本的思路:
先找出所有子数组;
将所有子数组存入一个二维数组中(所有子数组存入二维数组中:以第i个开头的子数组们存入第i行);
找出每行的最大值存入另一个数组中;
分别比较再找出最大值子数组。
public class Shuzu { public static void main(String[] args){ int []a= {0,1,2,3,-2,-1,4,-5,10}; System.out.println("最大子数组:"+max(a)); } public static int max(int a[]) { /** * 求一维数组最大子数组 */ int x=a.length; int b[][]=new int[x][x];//存子数组 int c[]=new int[x];//存二维数组每一行的最大值 for(int i=0;i<x;i++) {//所有子数组存入二维数组中:以第i个开头的子数组们存入第i行 for(int j=0;j<x;j++) {//求出二维数组的一行 int sum=0; for(int s=i;s<=j;s++){//求每一个子数组 sum+=a[s]; } b[i][j]=sum;//存子数组 System.out.println("b"+i+" "+j+":"+b[i][j]); } }; for(int i=0;i<x;i++) {//i为行 for(int j=0;j<x;j++) {//j为列 if(b[i][j]>c[i]) { c[i]=b[i][j]; } } } int s=0; for(int i=0;i<c.length;i++) { if(s<c[i]) { s=c[i]; } }; return s; } }
运行结果: