返回一个整数数组中最大子数组的和

要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为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;
    }
}

这个作业共有三个阶段,但是我只完成了第一阶段。

这个问题我最初的想法是做一个嵌套循环,以时间的延长换取逻辑的简单

但是,作业对于时间复杂度有要求,我便在之前的基础之上进行了修改,在子结果中加入了判断,用来取代之前的一重循环最终实现

posted @ 2022-06-14 12:55  软工小蜗牛  阅读(59)  评论(0编辑  收藏  举报