标签:style blog color for 问题 div log c
问题:一个由正数、负数、0组成的序列中,求一个连续子序列,使他们之和最大
解一:暴力法,直接求出所有可能,找出最大值
1 MAX_SEQ_SUM( A, len ) 2 max = A[0] 3 max_b = max_e = 0 4 5 for i -> 0:len-1 6 sum = 0 7 for j->i:len-1 8 if j == i then sum = A[i] 9 else sum += A[i] 10 if sum > max then 11 max = sum 12 max_b = i 13 max_e = j 14 15 return max,max_b,max_e
复杂度为:O(n^2)
解法2:遍历数组时记录当前和,如果和大于最大值,则记录,如果和小于0,则从当前元素重新计算
MAX_SEQ_SUM(A,len) sum = max = A[0] max_b = max_e = 0 for i -> 1:len if sum < 0 then sum = A[i] ; b = e = i; else sum += A[i] ; e = i; if sum < max then max = sum ; max_b = b; max_e = e; return max,max_b,max_e
复杂度为:O(n)
标签:style blog color for 问题 div log c
原文地址:http://www.cnblogs.com/stormli/p/max_seq_sum.html