一、题目
返回一个一维整数数组中最大子数组的和。
二、设计思路:
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]); } } }
四、截图: