开发要求:
1、输入一个整型数组,数组里有正数也有负数;
2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
3、求所有子数组的和的最大值,要求时间复杂度为O(n);
一设计思路:
1.键盘输入int型数组
1.2确定数组长度
1.3 进行数组输入赋值
1.4 进行输入数字检查(是否是数字,是否超额)
2进行子数组相加求和
2.1 判断sum初始值,
2/2 sum<0,取sum=arry[i],否则相加求sum
2/3进行 sum和maxsum比较大小
3如果子数组全是负数 ,MAxsum=max;
3/2max=arry[0]输入数组的首个
,
二:实验代码
1 package shuzu01; 2 3 import java.util.Scanner; 4 import java.lang.*; 5 public class Test { 6 7 private static boolean flase; 8 9 10 11 12 13 @SuppressWarnings("unused") 14 public static void main(String arg[]) 15 { 16 int i; 17 Scanner input =new Scanner(System.in); 18 System.out.println("请输入一个数组的长度"); 19 int length=input.nextInt(); 20 int []arry=new int[length]; 21 //判断数组输入整数 22 System.out.println("请输入一个数组"); 23 for(i=0;i<length;i++ ) 24 { 25 int a=input.nextInt(); 26 isNumeric(a); 27 if(false) 28 { 29 System.out.println("请输入一个整数"); 30 int s=input.nextInt(); 31 32 arry[i]=s; 33 } 34 arry[i]=a; 35 36 } 37 int Maxsum=0,max,num=1,count=0; 38 int sum=0; 39 //Maxsum是子数组和最值,max是整数最值 40 //sum是子数组和,coun他表示复数个数 41 for(i=0;i<length;i++) 42 { 43 if(sum<0) 44 { 45 sum=arry[i]; 46 } 47 else 48 { 49 sum+=arry[i];//当子数组和小于0时,与无论与后面数组如何相加,和肯定小于后一段数组之和,此时,将b重新赋值,置为下一个元素
50 } 51 if(Maxsum<sum) 52 { 53 Maxsum=sum; 54 } 55 } 56 //最大元素数组中 57 max=arry[0]; 58 for(i=0;i<length;i++) 59 { 60 if(arry[1]<0) 61 { 62 count++; 63 } 64 if(arry[i]>0) 65 { 66 max=arry[i]; 67 } 68 if(count==length) 69 { 70 Maxsum=max; 71 } 72 } 73 74 System.out.println("子数组最大值"+Maxsum); 75 76 77 78 79 80 for(i=0;i<length;i++ ) 81 { 82 System.out.println(arry[i]); 83 } 84 85 } 86 87 88 89 //判断函数,表示输入的是数字 90 91 public static boolean isNumeric(int a) 92 { 93 if (!Character.isDigit(a)) 94 { 95 return false; 96 } 97 98 99 return true; 100 } 101 102 }
三:截图: