Java——返回最大子数组
本次作业的完成程度停留在课堂上,课下没有对程序进行算法复杂度的补充。
设计思想:本程序的要求是可以求出最大子数组之和。老师给出了一个提示,在不考虑算法复杂的情况下,可以想办法求出所有子数组的和,然后选择出最大的那一个。我便以这个为方向进行编程。首先要得到一个数组,我选择了从键盘输入数组的大小,使用一个循环输入这个数组。又想到需要比较所有子数组和的大小,因此用一个一维数组储存这些数。通过观察,得到子数组个数和原数组大小的关系。而后使用一个两层的循环,来得到所有子数组的和,并储存在一维数组里面。再通过一个循环,得到数组的最大值,至此便得到了最大子数组之和。
出现的问题:由于这个程序不是很复杂,我使用的方法也比较单纯,便没有出现太大的问题。但是,由于一个寒假没有进行编程,导致在写取出一维数组最大值算法的时候耽误了一点时间,,,捞啊。
解决方案:在比大小的算法中,将数组第一个数作为最大值,与而后的每一个元素比较,得到整个数组的最大值。
源代码:
package bigzishuzu; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int [] num=new int[30]; int n; int i,j; int cishu; int sum; int max; max=0; cishu=0; System.out.println("请输入数组的个数:"); @SuppressWarnings("resource") Scanner scan=new Scanner(System.in); n=scan.nextInt(); int geshu=((1+n)*n)/2; int [] daxiao=new int[300]; for(i=0;i<n;i++) { //完成数组的的输入 num[i]=scan.nextInt(); } for(i=0;i<n-0;i++) { sum=0; for(j=i;j<n;j++) { sum=sum+num[j]; System.out.println("第"+cishu+"个子数组的和为:"+sum); daxiao[cishu]=sum; cishu++; } } max=daxiao[0]; for(int l=0;l<geshu;l++) { if(max<daxiao[l]) { max=daxiao[l]; } } System.out.println("最大子数组和为:"+max); } }
结果截图:

总结:
以后要多动手进行编程,避免手生。
此程序在时间复杂度这一问题上没有达到标准,将在以后进行补充。
浙公网安备 33010602011771号