美文网首页
2018年携程实习生编程题——求子数组和的最大值

2018年携程实习生编程题——求子数组和的最大值

作者: subject_2619 | 来源:发表于2017-09-10 20:19 被阅读0次

题目:给定一个数组,求出该数组的所有子数组和的最大值,要求时间复杂度为O(n)。
比如:数组[1,2,-4,5,2,-5],其中子数组[5,2]的值为7是最大的。
思路:先分两种情况:1.数组中全为负数的情况,就是找出所有负数中的最大值;2.数组中不全为负数, 遇到正数就加,当遇到负数的时候,就记录一下前面正数的和,并且改正数和再和上一个正数和做比较。同时要为乐保证事件复杂度为O(n),上面提到的两种情况要在一个数组遍历中完成,不多说了代码如下(如果有bug,小弟希望大家指出来):

        int calcuCount(int[] p)
        {
            int sum = 0;
            int b = 0;
            int num = 0;
            int tmp = p[0];
            for (int i = 0; i < p.Length; i++)
            {
                if (p[i] > 0)
                {
                    b = b + p[i];
                }
                else
                {
                    num++;
                    if (p[i] > tmp)
                    {
                        tmp = p[i];
                    }
                }

                if (b > sum)
                {
                    sum = b;
                }
            }
            if (sum == p.Length)
                sum = tmp;
            return sum;
        }

相关文章

网友评论

      本文标题:2018年携程实习生编程题——求子数组和的最大值

      本文链接:https://www.haomeiwen.com/subject/vxptsxtx.html