zoukankan      html  css  js  c++  java
  • 结对开发之《返回一个整数数组中最大子数组的和》

    一、题目:

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

      要求:

      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 }

    四、结果截图

    (既有正数又有负数)

    (全正数)

    (全负数)

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

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

  • 相关阅读:
    Java 中的数组操作
    WinForm 无边框窗体、后台创建控件、timer控件
    WinForm 进程与线程
    WinForm messageboxbuttons 和 三级联动
    WinForm ListView控件属性及用法
    WinForm 多窗体、菜单和工具栏控件
    WinForm 小练习订餐界面
    WinForm 公共控件及其常用属性
    WinForm 常用属性及控件
    ADO.NET 数据访问类查询、属性扩展
  • 原文地址:https://www.cnblogs.com/KevinBin/p/4351413.html
Copyright © 2011-2022 走看看