最大子数组

一、设计思路:

  初始化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 }

 

三、截图:

 

posted @ 2017-03-31 19:44  发酸的丶牛奶  阅读(109)  评论(0编辑  收藏  举报