您的位置:首页 > 其它

最大连续子序列之和问题

2012-04-04 15:01 169 查看
(源自算法分析课件)

长度为n的数组有n2个子序列,长度为n的序列求和时间复杂度为O(n),这样穷举求解的方法是与本题无关的,呵呵。

int maxSubSequenceSum( int a[ ], int n )
{
  maxSum = 0;
  subSum = 0;
  
  for ( j = 0; j<n; j++ ) // i 是subSum的起始位置,j 是subSum的结束位置
  {
    subSum += a[ j ];  /* subSum是从始至终一直在累加的,当为负时归0。
                而maxSum就是整个过程中subSum最大的值。
                算法的思想是:subSum是从前往后递进的子序列和,
                只要subSum为正,它对后面的子序列的和都是起积极作用的,
                为负时起消极作用,所以subSum归0 。*/
    if ( subSum > maxSum ) //刷新最大值
        maxSum = subSum;
    else
      if ( subSum < 0 ) //过滤累加负值部分
        subSum = 0;
  }
  return maxSum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: