课堂测试
课堂测试:
题目:返回一个整数数组中最大子数组的和。
要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。
package intergerarry; import java.io.*; import java.util.Scanner; public class intergerarry { public int shuchu(int a,int l,int f[],int x) { int m[]=new int[l*(l+1)/2]; m[0]=f[a]; a=a+1; int b=1,s=0; for(int i=a;i//从第一位开始循环,控制循环长度 { if(i==x-1)//如果循环到最后一位 { m[b]=m[b-1]+f[i]; i=a+s;//从原数组的下一位开始 s++;//起始位置加1 b++; m[b]=f[i]; b++; } else//如果没有到最后一位 { m[b]=m[b-1]+f[i];//将每一位都求和累加,求出每个子数组的和,保存在数组m中 b++; } } int t=m[0]; for(int i=1;i ) { if(t<m[i]) { t=m[i]; } } return t; } }
package intergerarry; import java.util.*; public class figure { public static void main(String[] args) { // TODO 自动生成的方法存根 int f[]={1,2,-3,0,7,-8,4};//原数组 int ff[]={1,2,-3,0,7,-8,4,1,2,-3,0,7,-8,4};//构造的循环数组。使得可以循环 int n=7; int s[]=new int[n]; intergerarry m=new intergerarry(); int t=m.shuchu(0,2*n,ff,n);//调用类的函数,第一个参数为起始位置,第二个为数组的长度,最后一个参数原数组的长度 System.out.println("最大子数组的和为:"+t);//输出最大值 } }
在听完前几个同学的讲解然后通过观看一些学长的博客获得启发,再按照学长的思路完成本次课堂测试。