DraculaW

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  19 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
其实这个题目也很简单 有很多种做法...

就是给一个array你 然后你找出 i,j使从第i个加到第j个最大就好了啊

最简单的算法就是两个for 算下来不到n^2的时间复杂度 可是还有更快的算法哦

首先 可以使用分治算法 这样的算法大概时间复杂度是 n*lg n, 但是这样还不是最好的

最好的其实是把前一个状态储存下来然后进行比较 这个算法时间复杂度只有n哦 很快的呢

先不要看 给个 int a[10] = { 31, -41, 59, 26, -53, 58, 97, -93, -23, 84 }

求它的最大子串有多大哦

inline int
max( int a, int b)
{
    return a > b ? a : b;
}

/*****************************************************************************
* This Function count a array find the largest string count max              *
* Function : CountMax                                                        *
* int    *a : the array of int                                                *
* int     n : the range of array                                              *
* return    : the sum of max this function find                               *
*****************************************************************************/
int
CountMax ( int *a, int n )
{
    int sum = 0, tmp = 0;
    for( int i = 0; i < n; i++ )
    {
        tmp = max( 0, tmp + a[i] );
        sum = max( sum, tmp );
    }

    return sum;
}
/* -----   end of function CountMax   ----- */
posted on 2007-11-15 20:37 DraculaW 阅读(139) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理