zoukankan      html  css  js  c++  java
  • 软件工程之返回整数数组的子数组和的最大值

      先声明一下,结对开发人员是张永&吴盈盈。

      又是一次战斗的课堂,先前的自己没有经过这么限时的训练,以至于我这只小菜鸟受到了致命的摧残,写个程序一头汗都出来了,悲催的,建民老师,开恩啊。不过这样的课堂多多益善吧。

    方案一:

      这个题目对所有的人来说都很简单了,看到这个题目很快就能够想到一种解决方案,把所有子数组的和都求出来,然后再求出和最大的那个值输出来,我和盈姐讨论的还是很激烈的,赶时间,把思想转换成代码,选择了java(我这搭档好像把java的语法忘得差不多了。。。),紧张的写了20多分钟,这种场合简直限制我的思维啊,幼小的心灵受到了暴风雨似的摧残。在建民老师一声口令下,交给了盈姐(建民老师搞的一套)。紧张的盈姐敲键盘都有点哆嗦了哈。没事,反正大家都是鸟,我们还是好鸟呢。过了一会,哎,实现了。想让老师看一下我们的结果。这个建民老师啊,竟然让我们给他看讨论的稿子,我去,想法都在脑子里呢。结果看都不看了。拉倒,先把代码贴在这:

    /**  
        * @Name: sum
        * @Description: 将一个整数数组的所有子数组的和存放到sumList集合中
        * @Author: 张永&吴盈盈(作者)
        * @Version: V1.00 (版本号)
        * @Create Date: 2014-3-10 (创建日期)
        * @Parameters:int number[]
        * @Return: 无
        */
        public void sum(int number[])
        {    
            int sum=0;
            String indexs="";
            for(int i=0;i<number.length;i++)
            {
                for(int j=0;j<number.length;j++)
                {
                    for(int n=i;n<=j;n++)
                    {
                        sum=sum+number[n];
                        indexs=indexs+n;//记录子数组的索引
                    }
                    SumObject sumObject=new SumObject(sum,indexs);
                    sum=0;
                    indexs="";
                    sumList.add(sumObject);
                }
            }
        }
        
        
        /**  
        * @Name: MaxOfSum
        * @Description: 在集合类sumList中选出最大的那个对象
        * @Author: 吴盈盈(作者)
        * @Version: V1.00 (版本号)
        * @Create Date: 2014-3-10 (创建日期)
        * @Parameters:无
        * @Return: MaxOfSum对象
        */
        public SumObject MaxOfSum()
        {
            int max=0;
            String indexs="";
            for(int i=0;i<sumList.size();i++)
            {
                if(max<sumList.get(i).getSum())
                {
                    max=sumList.get(i).getSum();
                    indexs=sumList.get(i).getIndexs();
                }
            }
            SumObject sumObject=new SumObject(max,indexs);
            return sumObject;
        }

    测试数据:1.num[]={-1,-2,3};   结果:3      2.num[]={1,2,3};  结果:6

    方案二:

      虽然第一种方法实现了,但是这道出自《编程珠玑》的题目,在这本书上给出了四个算法,老师让我们找出一个线性算法。好家伙,这可是真真的用到了数学功底啊,我都想找数学老师来探讨一下了。。。还是和队友想想吧,在网上参考了一下别人的思想,这个算法果然很好,用一个变量max记录子数组和的最大值,然后遍历数组(索引从0开始变化),再用一个可能的最大值变量max1,数组的下标每增加1: 当前的和max1和0比较,如果小于零,证明当前索引的数组是个负数而且很大,下次子数组直接从当前元素的下一项开始;如果max1的值大于max,则让max=max1;直到遍历结束,则max中存放的就是最大值。写了这么多文字,不知道有没有描述清楚,给出代码实现吧:

    /**  
        * @Name: bestSearchMaxSum
        * @Description: 在求子数组的最大和
        * @Author: 张永&吴盈盈(作者)
        * @Version: V1.00 (版本号)
        * @Create Date: 2014-3-10 (创建日期)
        * @Parameters:整型数组number[],SumObject对象maxSumObject
        * @Return: SumObject对象
        */
        
        public SumObject bestSearchMaxSum(int number[], SumObject maxSumObject)   
        {  
            int i;  
            int max=0; 
            String indexStart=""; 
            String indexEnd="";
            for ( i = 0; i < number.length; i++ )  
            {  
                if ( (max= number[i] + max) > 0 )  
                {  
                    indexEnd = i+"";  
                }  
                else  
                {  
                    indexStart = ""+(i + 1);   
                    max = 0;  
                }  
                if ( max > maxSumObject.getSum() )   
                {  
                    maxSumObject.setSum(max);  
                }  
            }  
            maxSumObject.setIndexs(indexStart+indexEnd);
            return maxSumObject;
        }
    还是方案一的测试数据,结果完全正确,这次的算法,就符合老师所谓的线性算法了吧,建民老师,这次看看吧!
  • 相关阅读:
    在UpdatePanel上使用FileUpload上传文件
    Android配置开发环境
    文件服务器共享目录设置(一)
    win2008R2的Hyperv安装Ubuntu
    Comodo Time Machine导致系统进不去
    sql2005生成sql2000脚本的时候出现“User.UserType: NoLogin 不是SQL Server 2005 的有效选项“ 的解决方案
    迅雷7偷偷上传文件导致机器变卡
    文件服务器共享目录设置(二)
    再谈Javascript原型继承
    a和a:link的区别
  • 原文地址:https://www.cnblogs.com/zhangyongJava/p/3592536.html
Copyright © 2011-2022 走看看