课堂测试-求子数组和最大值

设计思想:

1.首先设数组中的第一个数为最大值,循环从0开始,和相邻的数相加;

2.若得到的和大于最大值,则将和的值赋给最大值;

3.若得到的和小于0,则将和赋为0,相当于从下一个数开始下一次循环;若最大值小于当前值,则将当前值赋给最大值,以保证全为负数时的正确。

出现的问题:

最后求得的最大值没有计算负数,如 5 -1 3,得到的是8

解决方案:

令数组第一个数为最大值,循环从0开始,即可解决问题。

源代码:

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 @ 2016-04-06 15:18  勿言¥  阅读(168)  评论(0编辑  收藏  举报