求解数组中子数组的最大值

来源:互联网 发布:js数组常用方法 编辑:程序博客网 时间:2024/06/04 19:33

相信也有一部分人做过类似的题目。一个整型数组,有正有负,求出其中子数组的最大值。一开始可以设置两个for循环来求出最大值,但这样的时间复杂度为n的二次方。后来经过别人点播,想了一下,发现可以改进。

假设int a[ ] = {2,3,-6,5,3,-2,6,1,-2},则子数组为{5,3,-2,6,1},最大值为13。

从上述数组可以推出一般性。可以设置maxNum来存储最大值,例如从第一位2开始,加上3为5,这时maxNum为5,这时候加上(-6),则maxNum变为-1,任何数加上负数皆会变小。这时便可以舍弃前面这部分,重新把maxNum置为0。此时继续相加,5加上3为8,maxNum为8,这时候加上-2,保持maxNum为8不变,继续循环,加上6,明显{5,3,-2}这部分值为正,加上6的和超过maxNum,则子数组变为{5,3,-2,6},maxNum为12,之后依然按这种思路继续下去,则可求得最大值。





1 0
原创粉丝点击