• 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)


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

    要求: 输入一个整型数组,数组里有正数也有负数;

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

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

    一、设计思想

    1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数。

    2.从数组中第一个元素a[0]开始,依次计算a[0]、a[0]+a[1]、a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值。

    3.再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值。

    4.依次循环,循环num次,直到数组最后一个元素,将每次求得的最大值存到一个数组list[]中。

    5.比较每次得出的子数组的和的最大值,再得出最大值。

    二、源程序

     1 //作者:王雪青   陆宇
     2 //日期:2015年3月18日
     3 package com.java.lianxi;
     4 
     5 import java.util.*;
     6 public class lianxi2 
     7 {
     8     public static void main(String[] args)
     9     {
    10         Scanner input=new Scanner(System.in);
    11         System.out.print("请输入数组中数的个数:");
    12         int num=input.nextInt();
    13         int array[]=new int[num]; 
    14         for(int i=0;i<num;i++)
    15         {
    16             if((int)(Math.random()*2)==0)
    17             {
    18                 array[i]=(int)(Math.random()*10);
    19             }
    20             else
    21             {
    22                 array[i]=-(int)(Math.random()*10);
    23             }
    24         }
    25         for(int i=0;i<num;i++)
    26         {
    27             System.out.println(array[i]);
    28         }
    29         int max=0;
    30         int list[]=new int[num];
    31         for(int j=0;j<num;j++)
    32         {
    33             max=array[j];
    34             int sum=0;
    35             for(int t=j;t<num;t++)
    36             {
    37                 sum=sum+array[t];
    38                 if(sum>max)
    39                 {
    40                     max=sum;
    41                 }
    42             }
    43             list[j]=max;
    44         }
    45         for(int i=0;i<num;i++)
    46         {
    47             System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:");
    48             System.out.println(list[i]);
    49         }
    50         for(int i=1;i<num;i++)
    51         {
    52             max=list[0];
    53             if(list[i]>max)
    54             {
    55                 max=list[i];
    56             }
    57         }
    58         System.out.print("子数组和的最大值为:"+max);
    59     }
    60 }
    61     

    三、运行结果截图:

    四、心得体会和总结

      我们组的两个人是我王雪青和陆宇,这个题目的实现方法是陆宇想到的,然后程序是由我编写的,程序中的问题是我们两个一起解决的。这个程序基本实现了题目中的要求,但是时间复杂度不满足要求,今后我们会对这方面做改进,使程序更加完善。

          

  • 相关阅读:
    2019 SDN大作业
    个人作业——软件工程实践总结作业
    1.机器学习,从入门到放弃入门
    python25之进制转换
    python学习24之异常
    python学习23之标准库
    python学习22之函数式编程
    python学习21之高级特性
    python学习20之面向对象编程高级
    python学习19类5之多态与鸭子模型
  • 原文地址:https://www.cnblogs.com/maximumminimum/p/4347841.html
Copyright © 2020-2023  润新知