第一步,先将求和部分写出来
1 public class shuzu { 2 public static int maxSum(int arr[]){ //定义一个函数maxSum 求数组中子数组和的最大值 3 int sum = arr[0]; //sum 子数组和 4 int b = 0; 5 for(int i = 0;i<arr.length;i++) 6 { 7 if(b<=0) //子数组和小于0时,b为子数组为0时的元素的后一位 8 { b=arr[i]; } 9 else 10 {b+=arr[i]; } //b 子数组和 11 if(b>sum)sum=b; //将最大子数组和赋值给sum 12 } 13 return sum; 14 }
第二步,想方法使子数组可以在原数组基础上首尾相连,这里采用取余的办法。
public static void main(String[] args) { System.out.println("请输入数组中元素个数;"); Scanner reader=new Scanner(System.in); int n=reader.nextInt(); int []array=new int[n]; int []array1=new int[n]; System.out.println("请输入数组:"); for(int i=0;i<n;i++) //输入数组 { array[i]=reader.nextInt(); } int sum = maxSum(array); //调用函数 for(int i=1;i<n;i++) //循环n-1次,从第二个数往后依次作为数组第一个数 { for(int j=0;j<n;j++) //通过取余保证数组首尾相接 { array1[j]=array[(j+i)%n]; } int sum1= maxSum(array1); //调用函数 if(sum1>sum) //取每个数组子数组最大值 { sum=sum1; } } System.out.println("最大字数组之和为:"+sum); } }