结对开发之《返回一个整数数组中最大子数组的和》

一、题目:

      返回一个整数数组中最大子数组的和。

  要求:

  1.输入一个整形数组,数组里有正数也有负数。

  2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

  3.求所有子数组的和的最大值。要求时间复杂度为O(n)。

二、设计思路

  1.定义一个大小为10的数组,接受任意十个自然正数;

  2.分别将连续的一个数,两个数,......,组合成子数组,分别求出包含一个元素的数组的最大值,两个元素的,三个元素的,......,然后再比较这十组的值,求出最大值,即为所求;

  3.单独判断一些特殊的容易计算的情况,比如全是负数、全是正数、只有一个正数。这样能有效地提高程序的效率。;

三、源代码

  1 import java.util.*;
  2 
  3 class SuperMax
  4 {
  5     public static void main(String[] args)
  6     {            
  7         Scanner sc=new Scanner(System.in);
  8         
  9         int[] list = new int[10];//输入数组是必须先定义数组,否则出错!
 10         int[] arr1 = new int[9];//输入数组是必须先定义数组,否则出错!
 11         int[] arr2 = new int[8];//输入数组是必须先定义数组,否则出错!
 12         int[] arr3 = new int[7];//输入数组是必须先定义数组,否则出错!
 13         int[] arr4 = new int[6];//输入数组是必须先定义数组,否则出错!
 14         int[] arr5 = new int[5];//输入数组是必须先定义数组,否则出错!
 15         int[] arr6 = new int[4];//输入数组是必须先定义数组,否则出错!
 16         int[] arr7 = new int[3];//输入数组是必须先定义数组,否则出错!
 17         int[] arr8 = new int[2];//输入数组是必须先定义数组,否则出错!
 18         int[] ma = new int[10];//输入数组是必须先定义数组,否则出错!
 19 
 20         int i=0,sum = 0;
 21         System.out.println("请输入数组:");
 22         for(int k=0;k<10;k++)
 23         {
 24             list[k]=sc.nextInt();
 25         }
 26         int max=list[0];
 27         
 28         for(i=0;i<10;i++)
 29         {
 30             if(list[i]>max)
 31             {
 32                 max=list[i];
 33             }
 34             
 35         }
 36         ma[0] = max;
 37         System.out.println("有1个元素最大子数组的和为"+ma[0]);
 38         for(i=0;i<9;i++)
 39         {
 40             arr1[i] = list[i]+list[i+1];
 41         }
 42         int max1=arr1[0];
 43         for(i=0;i<9;i++)
 44         {
 45             if(arr1[i]>max1)
 46             {
 47                 max1=arr1[i];
 48             }
 49         
 50         }
 51         ma[1]=max1;
 52         System.out.println("有2个元素最大子数组的和为"+ma[1]);
 53         for(i=0;i<8;i++)
 54         {
 55             arr2[i] = list[i]+list[i+1]+list[i+2];
 56         }
 57         int max2=arr2[0];
 58         for(i=0;i<8;i++)
 59         {
 60             if(arr2[i]>max2)
 61             {
 62                 max2=arr2[i];
 63             }
 64             
 65         }
 66         ma[2]=max2;
 67         System.out.println("有3个元素最大子数组的和为"+ma[2]);
 68         for(i=0;i<7;i++)
 69         {
 70             arr3[i] = list[i]+list[i+1]+list[i+2]+list[i+3];
 71             
 72         }
 73         int max3=arr3[0];
 74         for(i=0;i<7;i++)
 75         {
 76             if(arr3[i]>max3)
 77             {
 78                 max3=arr3[i];
 79             }
 80             
 81         }
 82         ma[3] = max3;
 83         System.out.println("有4个元素最大子数组的和为"+ma[3]);
 84         for(i=0;i<6;i++)
 85         {
 86             arr4[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4];
 87         }
 88         int max4=arr4[0];
 89         for(i=0;i<6;i++)
 90         {
 91             if(arr4[i]>max4)
 92             {
 93                 max4=arr4[i];
 94             }
 95             
 96         }
 97         ma[4] = max4;
 98         System.out.println("有5个元素最大子数组的和为"+ma[4]);
 99         for(i=0;i<5;i++)
100         {
101             arr5[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5];
102         }
103         int max5=arr5[0];
104         for(i=0;i<5;i++)
105         {
106             if(arr5[i]>max5)
107             {
108                 max5=arr5[i];
109             }
110             
111         }
112         ma[5] = max5;
113         System.out.println("有6个元素最大子数组的和为"+ma[5]);
114         for(i=0;i<4;i++)
115         {
116             arr6[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6];
117         }
118         int max6=arr6[0];
119         for(i=0;i<4;i++)
120         {
121             if(arr6[i]>max6)
122             {
123                 max6=arr6[i];
124             }
125             
126         }
127         ma[6] = max6;
128         System.out.println("有7个元素最大子数组的和为"+ma[6]);
129         for(i=0;i<3;i++)
130         {
131             arr7[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7];
132         }
133         int max7=arr7[0];
134         for(i=0;i<3;i++)
135         {
136             if(arr7[i]>max7)
137             {
138                 max7=arr7[i];
139             }
140             
141         }
142         ma[7] = max7;
143         System.out.println("有8个元素最大子数组的和为"+ma[7]);
144         for(i=0;i<2;i++)
145         {
146             arr8[i] = list[i]+list[i+1]+list[i+2]+list[i+3]+list[i+4]+list[i+5]+list[i+6]+list[i+7]+list[i+8];
147         }
148         int max8=arr7[0];
149         for(i=0;i<2;i++)
150         {
151             if(arr8[i]>max8)
152             {
153                 max8=arr8[i];
154             }
155         
156         }
157         ma[8] = max8;
158         System.out.println("有9个元素最大子数组的和为"+ma[8]);
159         for(i=0;i<10;i++)
160         {
161             sum = sum+list[i];
162         }
163         ma[9] = sum;
164         System.out.println("有10个元素最大子数组的和为"+ma[9]);
165 
166         int max9=ma[0];
167         for(i=0;i<10;i++)
168         {
169             if(ma[i]>max9)
170             {
171                 max9=ma[i];
172             }
173         
174         }
175         System.out.println("最大子数组的和为"+max9);
176     }
177 
178 }

四、结果截图

(既有正数又有负数)

(全正数)

(全负数)

五、心得体会
     在这次实验中,尝试和同学组队做实验,感觉还不错。好处是可以互相能借鉴对方的想法和思路,
 自己不注意的地方可能对方就注意到了,也能提高效率,但是缺陷就是每个人都有自己的思路,这样会在写代码的过程中比较耽搁时间,
 但是总体来说,还是效率比较高的,在以后的练习中还应该多加练习组队练习,毕竟在今后的工作中还是以团队为整体工作,
 经常的练习还是会有很好的提高的。

 六、工作照(成员:杨广鑫,郭健豪)

posted @ 2015-03-19 19:36  Gjianhao  阅读(143)  评论(0编辑  收藏  举报