一、设计思路:
初始化max为a[0];sum依次计算和,如果sum大于零且大于max,将max值更新,否则,sum继续往后加,避免例如 2,-1,2 这种情况,如果sum值小于零,则将sum值归零,循环。
统计始末位置下标,每更新max记录尾标,每归零sum值,起始下标更新。
二、源代码:
1 package ketang; 2 3 public class Zishuzu { 4 public static void main(String[] args){ 5 int []a={5,3,-2,-1,10}; 6 int []b={-5,-3,2,-1,-10}; 7 int []c={-5,-3,-2,-1,-10}; 8 max(a); 9 maxhuan(a); 10 max(b); 11 max(c); 12 } 13 public static void max(int []a){ 14 int max=a[0],sum=0,wei=0,tou = 0; 15 String s=""; 16 for(int i=0;i<a.length;i++){ 17 sum+=a[i]; 18 s+=i; 19 if(sum>=0){ 20 if(sum>max){ 21 max=sum; 22 wei=i; 23 } 24 else 25 continue; 26 } 27 else{ 28 sum=0; 29 s=""; 30 } 31 } 32 wei++; 33 //全负数和尾负数处理 34 if(s.equals("")){ 35 if(max<0){ 36 max=a[0]; 37 for(int i=0;i<a.length;i++){ 38 if(a[i]>max){ 39 max=a[i]; 40 tou=i; 41 } 42 } 43 tou++; 44 wei=tou; 45 } 46 else{ 47 for(int i=0;i<a.length;i++){ 48 if(a[i]>0){ 49 tou=i; 50 break; 51 } 52 } 53 tou++; 54 } 55 } 56 else 57 tou=Integer.parseInt(String.valueOf(s.charAt(0)))+1; 58 System.out.println("最大和:"+max+" "+"头:"+tou+" 尾:"+wei); 59 } 60 61 public static void maxhuan(int []a){ 62 int[] aa=new int[(2*a.length)-1]; 63 for(int i=0;i<a.length;i++){ 64 aa[i]=a[i]; 65 } 66 int j=a.length; 67 for(int i=0;i<a.length-1;i++){ 68 aa[j]=a[i]; 69 j++; 70 } 71 max(aa); 72 } 73 }
三、截图: