数组的最大子数组求和问题

    一个数组可以有很多个子数组,求一个数组中何止最大的子数组

 

          分析:求取最大的子数组和值,我们可以从从第一位开始,向后累加,然后与当前的以为开始比较,如果大于当前位上的数,那么说明此时的值为最大和值;若是小于当前位的值,则说明前一组即为最大和值。

   源代码:#include<iostream>
        using namespace std;
        int main()
        {
            int a[10],i,n;
            cin>>n;
            for(i=1;i<=n;i++)
                cin>>a[i];
            for(i=2;i<=n;i++)
            {
                if(a[i]+a[i-1]>a[i])
                    a[i]=a[i]+a[i-1];
            }
            int amin=-1000;
            for(i=1;i<=n;i++)
                min=max(min,a[i]);
            cout<<min<<endl;
            return 0;
         }

    结果截图:

         

 

 

 

若是环形数组,可将其考虑为将环形数组依次以每一位元素作为数组首元素,执行上述步骤。

 

总结:对于类似的问题要明确出自己所要做的每一步,如何求,求什么,可以对问题进行适当的分解,逐步解决

 

  

posted @ 2020-02-25 19:09  wumingxiaozu  阅读(249)  评论(0编辑  收藏  举报