求最大子数组的和

1.设计思想:

 从数组的第一个数开始依次相加,在上次相加的和为正数的情况下,如果下一个数正数,则最大子数组的和为二者相加;如果下一个数为负数,则最大子数组的和还是原来的取值。

如果上次相加的和为负数且下一个数为正数,就取下一个数的值为最大;如果下一个数也为负数,则比较选出大的那个作为最大子数组的和。

2.出现的问题,输入全为负数时,最大子数组的和为0

3.解决方案:将数组的第一个数赋值比较的第一个数

源代码:

package test;
import java.util.Scanner;
public class maxsum {
  public static void main(String[] args){
      int N;
      Scanner in=new Scanner(System.in);    
      System.out.println("请输入数组长度");
      N=in.nextInt();
      int i;
      int array[]=new int [N];
      System.out.println("请输入数组:");
      for(i=0;i<N;i++)
      {
          array[i]=in.nextInt();
      }
      maxsum p=new maxsum();
      System.out.print("子数组最大的和为:  "+p.max(array,N));
   
  }
}
class max
{
    int max(int list[],int length)
    {
        int i;
        int maxss=list[0];
        int max=list[0];
        //设最大值为list[0]
        for(i=1;i<length;i++)
        {
            if(max+list[i]>=list[i])
            {
                if(list[i]<0&&maxss<max+list[i])
                    maxss=max;
                max=max+list[i]; 
            }
            else
                max=list[i];
            
        }
        return max;
    }
}

截图:

原文地址:https://www.cnblogs.com/yanyuqing/p/5367880.html