一、题目:
一个有正有负的整数数组里,其中连续的一个或多个整数构成的整数组,有一个和,求最大子数组,要求,时间复杂度为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); } }
四。运行截图: