求和最大连续子数组,我的另类思路,求问题所在
笔试碰到的和最大连续子数组问题,要求时间复杂度O(n)
当时我的思路是这样的:
假设要求的数组为a[n],定义b[n],其中b[i]=a[i]+b[i-1],那么子数组a[i]到a[j](j>=i)的和即为b[j]-b[i-1],如果i=0,则为b[j];
子数组和最大问题转变为找最大的b[j]-b[i-1](j>=i);
寻找b[n]的最大值b[max]与最小值b[min];
当b[min]>0,得结果为a[0]到a[max],和为b[max];
当min<max,则结果为a[min+1]到a[max],和为b[max]-b[min];
当min=max,可知a[1]到a[n]全为0,结果为a[0];
当min>max,寻找b[0]到b[max]中的最小值b[m],与b[min]到b[n]中的最大值b[n];
b[max]-b[m](如b[m]大于0,则取b[max])与b[n]-b[min]比较大小,得出结果;
效率分析:其中b[n]初始化、寻找最大值、最小值的时间复杂度都为O(n),其余操作为常数时间,可得总的时间复杂度为O(n),空间复杂度为O(n);
我想知道我的思路哪里有问题