返回一个整数数组中最大子数组的和
题目:返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
设计思想:
从第一个数开始把数组相加,每加一个数对和进行判断,如果小于零,抛弃当前值,如果大于零,下一个数与零比较,小于零时,先将最大值与之前的和比较,在让和加上这个数,如果大于零,直接让和加上这个数,再取最大值和和之间的最大值。
源代码:
import java.util.Random; public class max { public static void main(String[] args) { // TODO Auto-generated method stub int n=20; int C[]=new int[n]; int a=0; int MAX=0; int b=0; Random rand=new Random(); for(int i=0;i<n;i++) { a=rand.nextInt(2); if(a==0) { C[i]=rand.nextInt(10); } else { C[i]=-rand.nextInt(10); } } b=C[0]; MAX=b; for(int i=1;i<n;i++) { if(b<0) { b=C[i]; if(MAX<b) { MAX=b; } } else { if(C[i]<=0) { if(MAX<b) { MAX=b; } b=b+C[i]; } else { b=b+C[i]; if(MAX<b) { MAX=b; } } } } System.out.print("数组为:"); for(int i=0;i<n;i++) { System.out.print(C[i]+" "); } System.out.println(); System.out.print("最大数组和为:"+MAX); } }
运行结果截图: