返回一个整数数组中最大子数组的和
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)
代码部分
import java.util.Scanner; public class Test2 { public static void main(String[] args){ int N=5; int list[]=new int [N]; //创建一个新数组 Scanner in=new Scanner(System.in); int i; System.out.println("请输入数组:"); for(i=0;i<N;i++) { list[i]=in.nextInt(); } max_ l=new max_(); System.out.print("子数组最大的和为: "+l.max_(list,N)); //调用函数 in.close(); } } class max_ { int max_(int list[],int length) { int i; int lmax=0; int max=list[0]; //设最大值为list[0] for(i=0;i<length;i++) { lmax+=list[i]; if(lmax>max||lmax==max) { max=lmax; } if(lmax<0)//若小于0,则从后一个数开始加和 { lmax=0; if(max<list[i]||max==list[i]) { max=list[i]; } } //若数组全为负数,求最大值 } return max; } }
这个作业共有三个阶段,但是我只完成了第一阶段。
这个问题我最初的想法是做一个嵌套循环,以时间的延长换取逻辑的简单
但是,作业对于时间复杂度有要求,我便在之前的基础之上进行了修改,在子结果中加入了判断,用来取代之前的一重循环最终实现