子数组问题2

一、题目

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

二、设计思路:

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

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

3、把输入的数组首尾相接

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

5、如果输入的数都是负数,就在原数组里排序。否则在存放数组里排序

5、把临时数组里的数排序,输出。

三、源代码:

//20142984程憧憬
//首尾相接求最大字数组和
import java.util.Scanner;
public class Arraysum {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
       Scanner in=new Scanner(System.in);
       System.out.println("请输入数组长度");
       int n = in.nextInt();
       int Array1[]=new int [2*n-1];
       int Array2[]=new int [2*n];
       int k=1;
       for(int i=0;i<n;i++)
       {
           Array1[i]=in.nextInt();
           if(Array1[i]>0)
               k =0; 
       }
       for(int i=0;i<n;i++)
       {
           Array1[n-1+i]=Array1[n-1-i];
       } 
       if(k==0)
       {  
           int d=0;
           int count=0 ;
           for(int i=0;i<2*n-2;i++)
               {  
               d=d+Array1[i];
               if(d<=0)
               {
                   d=Array1[i+1];
                   Array1[i+1]=0;
               }
           
           if(d>0)
           {
               Array2[count]=d;
               count++;
           }
    
       }
    
         for(int j=0;j<count-1;j++)
         for(int i=0;i<count-1-j;i++)
         {   if(Array2[i]>Array2[i+1])
             {
             int temp;
             temp=Array2[i];Array2[i]=Array2[i+1];Array2[i+1]=temp;
             }
         }
  
       System.out.println(Array2[count-1]);
     }
     
     if(k==1)
      {
         for(int j=0;j<2*n-2;j++)
             for(int i=0;i<2*n-2-j;i++)
             {  
                 if(Array1[i]>Array1[i+1])
                 {
                 int temp;
                 temp=Array1[i];Array1[i]=Array1[i+1];Array1[i+1]=temp;
                 }
             } 
         System.out.println(Array1[2*n-2]);
      }
    }
}

四、截图:

原文地址:https://www.cnblogs.com/3066405538a/p/5395956.html