求一个整形数组中最大的子数组的和

  

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

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

求所有子数组的和的最大值。要求时间复杂度为O(n)

 

  上课思考了很久,这个问题看似简单,但是在电脑上实现就很难了,需要有一个很好的思维。

  首先,数组得读取存写,读入之后进行求和计算并与原值比较,

  开始的时候,因为题意的不明确(自己转的慢),首先确定几个关键词:连续子数组,和最大,时间复杂度。

  这样,就可以下手了,将连续的数读入一个数组,从第一个数开始,与提前设定好的为零的tempsum相加,不影响,进行比较存储最大值,,进行for循环,直到最后一个数。

 

 public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("输入数组个数:");
            int n = sc.nextInt();
            System.out.print("输入数组:");
            int a[] = new int[n*2];         
            for(int i=0; i<n; i++)              
                {
                a[i] = sc.nextInt();
                }
           
            for(int j=0;j<n-1;j++)
            {
                a[n+j]=a[j];
            }
            sc.close();
            String intArrayString = Arrays.toString(a);
            System.out.println(large(a,n)); 
    }
     private  static int max(int a,int b) {
         if(a>b) return a;
         else return b;
     }
    private  static int large(int a[],int n) {
        int max=a[0];
        int max2=0;      
        for (int i= 0; i<n*2; i++)
        {
        max2=max(max2+a[i],a[0]);   //几个连续最大的值
        max=max(max,max2);    
             }
        return max;
    }

  代码就是这些代码,还有待改进,在思路上还要更清晰,这只是靠猜测,以及拼运气,没有绝对的信心。

原文地址:https://www.cnblogs.com/msdog/p/10506222.html