今天写的一道题 关于算法设计的一个提示

 

其实这个题目也很简单 有很多种做法...

就是给一个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   ----- */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值