• 结对开发——返回一个整数数组中最大子数组的和


    一、题目要求

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

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

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

    二、设计思想

    1.首先随机产生一个数组,该数组里有正数也有负数。

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

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

    4.比较所有子数组的和,得出最大值。

    三、程序代码

    //作者:王雪青   陆宇
    //日期:2015年3月18日
    package com.java.lianxi;
    
    import java.util.*;
    public class lianxi2 
    {
        public static void main(String[] args)
        {
            Scanner input=new Scanner(System.in);
            System.out.print("请输入数组中数的个数:");
            int num=input.nextInt();
            int array[]=new int[num]; 
            for(int i=0;i<num;i++)
            {
                if((int)(Math.random()*2)==0)
                {
                    array[i]=(int)(Math.random()*10);
                }
                else
                {
                    array[i]=-(int)(Math.random()*10);
                }
            }
            for(int i=0;i<num;i++)
            {
                System.out.println(array[i]);
            }
            int max=0;
            int list[]=new int[num];
            for(int j=0;j<num;j++)
            {
                max=array[j];
                int sum=0;
                for(int t=j;t<num;t++)
                {
                    sum=sum+array[t];
                    if(sum>max)
                    {
                        max=sum;
                    }
                }
                list[j]=max;
            }
            for(int i=0;i<num;i++)
            {
                System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:");
                System.out.println(list[i]);
            }
            for(int i=1;i<num;i++)
            {
                max=list[0];
                if(list[i]>max)
                {
                    max=list[i];
                }
            }
            System.out.print("子数组和的最大值为:"+max);
        }
    }

    四、实验结果截图

    五、实验心得体会

          本次程序中,求和取最大值用到了循环嵌套,时间复杂度要求没有达到。遇到问题时,分析每次循环所执行的代码,每次循环是否完成了目的。

     这次结对开发,我负责程序分析,设计好思路,王雪青主要负责编写代码,过程中遇到了问题,我们两个共同解决。

    六 工作照

     

  • 相关阅读:
    理解Java中字符流与字节流的区别
    程序员常见面试问题(不定期更新)
    软链接 硬链接
    《大数据时代》读后的思考
    mysql——int(size) 中的size表示什么意思
    Access denied for user ''@'localhost' to
    Effective c++——条款03:尽可能使用const
    http——wireshark抓包分析
    vim——vim配置步骤
    正则表达式和通配符
  • 原文地址:https://www.cnblogs.com/luyu2783/p/4347941.html
Copyright © 2020-2023  润新知