题目:给定一个数组,求出该数组的所有子数组和的最大值,要求时间复杂度为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;
}
网友评论