循环一维数组求子数组之和的最大值:
代码如下:
package text; import java.util.*; import java.util.Scanner; public class shuzu2 { public static int maxSum(int arr[]){ //定义一个函数maxSum 求数组中子数组和的最大值 int sum = arr[0]; //sum 子数组和 int b = 0; for(int i = 0;i<arr.length;i++) { if(b<=0) { b=arr[i]; } //子数组和小于0时,b为子数组为0时的元素的后一位 else {b+=arr[i]; } //b 子数组和 if(b>sum)sum=b; //将最大子数组和赋值给sum } return sum; } 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); } }
运行结果: