最大连续子序列之和问题
(源自算法分析课件)
长度为n的数组有n2个子序列,长度为n的序列求和时间复杂度为O(n),这样穷举求解的方法是与本题无关的,呵呵。
1 int maxSubSequenceSum( int a[ ], int n ) 2 { 3 maxSum = 0; 4 subSum = 0; 5 6 for ( j = 0; j<n; j++ ) // i 是subSum的起始位置,j 是subSum的结束位置 7 { 8 subSum += a[ j ]; /* subSum是从始至终一直在累加的,当为负时归0。 9 而maxSum就是整个过程中subSum最大的值。 10 算法的思想是:subSum是从前往后递进的子序列和, 11 只要subSum为正,它对后面的子序列的和都是起积极作用的, 12 为负时起消极作用,所以subSum归0 。*/ 13 if ( subSum > maxSum ) //刷新最大值 14 maxSum = subSum; 15 else 16 if ( subSum < 0 ) //过滤累加负值部分 17 subSum = 0; 18 } 19 return maxSum; 20 }
**************************************************************
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对困难,能够不休不眠;面对压力,能够迎接挑战。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想,用智慧把属于自己的事业开创。其实我是一个程序员[=.=]
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对困难,能够不休不眠;面对压力,能够迎接挑战。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想,用智慧把属于自己的事业开创。其实我是一个程序员[=.=]