题目:返回一个一维整数数组中最大子数组的和。
要求:
输入一个一维整形数组,数组里有正数也有负数。
一维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
设计思想:
生成数组,生成子数组,求和,求最大值。
代码:
package bao; import java.util.*; public class Msum { public static void main(String args[]) { Scanner input=new Scanner(System.in); System.out.println("请输入一维数组元素个数:"); int num=input.nextInt(); int Array[]=new int[num]; for(int i=0;i<num;i++) { if((int)(Math.random()*2)==0) { Array[i]=(int)(Math.random()*30);//30元素最大值 } else { Array[i]=-(int)(Math.random()*30); } } for(int i=0;i<num;i++) { System.out.println(Array[i]); } //sun[]子数组,Sum子数组元素和,找最大值maxSum int Sum=0,maxSum=0; int i=0; for(i=0;i<num;i++) { Sum+=Array[i];//累加 if(Sum<0)//当前和小于0,重置 { Sum=0; } if(Sum>maxSum) { maxSum=Sum; } } if(maxSum==0)//最大和依然为0,说明数组中元素都为负值 { maxSum=Array[0]; for(i=0;i<num;i++) { if(Array[i]>maxSum) { maxSum=Array[i];//最大元素即为maxSum } } } //输出maxSum System.out.println("最大子数组之和:"+maxSum); } }
截屏 :
总结:
子数组的生成:当累加和小于零是不能是值增大,重置。
扩展可以显示和最大的子数组,及其开始结束下标。
团队照片: