一、题目:
一个有正有负的整数数组里,其中连续的一个或多个整数构成的整数组,有一个和,求最大子数组,要求,时间复杂度为O(n)

二、设计思路:

1、先输入要输入的元素的个数。

2、构建两个INT类型的字数组,一个来存放数字,一个作为临时数组。

3、遇见正数就存放到临时数组里,并继续往下加,只要结果是正就继续存放。直到遇见负数,截断处理。

4、把临时数组里的数排序(不用冒泡,考虑到o(n)),输出。

三。源代码

 

package shuzuadd;
import java.util.Scanner;
public class main {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
      Scanner in = new Scanner (System.in);
      int n;//shuruchangdu
      n=in.nextInt();
      int Array1[]=new int [n];
      int Array2[]=new int [2*n];
      int sum,geshu=0;
      int max = 0;
      for(int i=0;i<n;i++)
      {
          Array1[i]=in.nextInt(); 
      }
      sum=0;
  
      for(int s=0;s<n;s++)
      {    
          
           if(sum<0)
           {
               sum=Array1[s+1];
           }
               if(sum>=0)
              {   
                  sum=sum+Array1[s];
                  Array2[geshu]=sum;
                  geshu ++;
              }
             
    
      }
       for(int x=0;x<=geshu;x++)
       {    
           if(Array2[x]<Array2[x+1])
               max=Array2[x+1];
           if(Array2[x]>=Array2[x+1])
               Array2[x+1]=Array2[x];
       }

    System.out.println(max);
    }
}

四。运行截图:

 

posted on 2016-04-08 13:42  憧憧  阅读(140)  评论(0编辑  收藏  举报