博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结对开发之《返回一个整数数组中最大子数组的和》
阅读量:5459 次
发布时间:2019-06-15

本文共 5501 字,大约阅读时间需要 18 分钟。

一、题目:

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

  要求:

  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 }

四、结果截图

(既有正数又有负数)

(全正数)

(全负数)

五、心得体会

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

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

转载于:https://www.cnblogs.com/KevinBin/p/4351413.html

你可能感兴趣的文章
微信网页授权调试
查看>>
不要有这样的思维定势
查看>>
十万个为什么 —— 自然的好奇
查看>>
指针应用时的注意事项
查看>>
作为电磁波的 Wi-Fi 信号
查看>>
一步步学会用docker部署应用(nodejs版)
查看>>
让表单input等文本框为只读不可编辑的方法-转
查看>>
Flink window Function - ProcessAllWindowFunction
查看>>
创建物料批次特性
查看>>
UI基础一:值节点赋值
查看>>
sql
查看>>
快速排序练习(二)
查看>>
网上见到一同行发的隐私政策 备以后用
查看>>
将响应数据进行压缩处理的过滤器(CompressionFilter)
查看>>
安装Hadoop
查看>>
感性的人最理性,理性的人很感性
查看>>
python
查看>>
乐观复制算法-6 多Master的operation transfer系统
查看>>
ubuntu16.04 安装java
查看>>
矩阵幂求和
查看>>