• 求一组数中连续的几个数之和最大值


    给定一组数,有正有负,求连续的几个数之和的最大值?用程序设计实现。这是一道面试题目,鄙人只是总结了两种方法,如果朋友你有更好的方法来解决这个问题,希望你能回复,与大家分享一下。
        /// <summary>
        
    /// 最笨的方法
        
    /// </summary>
        
    /// <param name="a"></param>
        
    /// <returns></returns>

        public int getMax(int[] a)
        
    {
              //不能定义max为0
            
    int max=a[0],temp=0;      

            
    if (a.Length == 0)
            
    {
                max 
    = 0;
                
    return max;
            }

            
    if (a.Length == 1)
            
    {
                max 
    = a[0];//或者为0,如果一个元素也不取
                return max;
            }
           
            
    for (int i = 0; i < a.Length; i++)
            
    {           
                
    for (int j = i; j < a.Length; j++)
                
    {
                    temp 
    = temp+a[j];
                    
    if (temp > max)
                    
    {
                        max 
    = temp;
                    }
                   
                }

                temp 
    = 0;
            }

            
    return max;
        }

        
    /// <summary>
        
    /// 第二种方法 将相邻的正数和零、负数整合成一个数,最后再比较
        
    /// 这样做,最糟糕的就是怕集合的元素都是正负交替出现
        
    /// </summary>
        
    /// <param name="a"></param>
        
    /// <returns></returns>

        public  int SegetMax(int[] a)
        
    {
            
    int max = a[0],temp=0, plusTemp = 0,negTemp=0;

            
    int i=0,j=0;
            List
    <int> list = new List<int>();
            
    if (a.Length == 0)
            
    {
                max 
    = 0;
                
    return max;
            }

            
    if (a.Length == 1)
            
    {
                max 
    = a[0];
                
    return max;
            }

            
    while (i<a.Length)
            
    {
                
    if (a[i] >= 0)
                
    {
                    
    while (j < a.Length&&a[j] >= 0)
                    
    {
                        plusTemp 
    = plusTemp + a[j];
                        j
    ++;
                    }

                    i 
    = j;
                    list.Add(plusTemp);
                    plusTemp 
    = 0;

                }

                
    else if (a[i] < 0)
                
    {
                    
    while (a[j] < 0 && j < a.Length)
                    
    {
                        negTemp 
    = negTemp + a[j];
                        j
    ++;
                    }

                    i 
    = j;
                    list.Add(negTemp);
                    negTemp 
    = 0;
                }

            }

            
    for (int p = 0; p < list.Count; p++)
            

                
    for (int k = p; k < list.Count; k++)
                
    {
                    temp 
    = temp + list[k];
                    
    if (temp > max)
                    
    {
                        max 
    = temp;
                    }

                }

                temp 
    = 0;
            }

            
    return max;
        }
    第二种方法最后验证是错误的。int[] a ={ -1000000,-1,-3,-8728272,-8383828,-009993939 };
    如果是这样,这种算法就存在问题,看来思路还是短路了。
  • 相关阅读:
    C++中的乱七八糟问题
    在Win环境下配置java的环境进行开发步骤
    常用软件破解
    关于QT建立项目中遇到的相关问题的处理办法
    QT5.4.0安装以及与VS2010整合安装---64bit操作系统解决方案
    STL容器之一vector
    STL
    三种初步简易的方法求解数值问题 of C++
    Visual Studio 简单使用常识操作
    江城感怀---诗一首
  • 原文地址:https://www.cnblogs.com/yank/p/1103189.html
Copyright © 2020-2023  润新知