PHP中怎样实现正负数的相加,PHP 求任意n个正负整数里面最大的连续和

案例描述:

编写一个PHP函数。求任意n个正负整数里面最大的连续和,要求算法时间复杂度尽可能低;

例如:echo getMaxSum(array(-2,1,3,9,-4,2,3,5,-3,-4,1,3));//最大连续和是(1,3,9,-4,2,3,5)相加函数返回19

代码如下:

header('content-type:text/html;charset=utf8 ');

//算法分析:

//1、必须是整数序列

//2、如果整个序列不全是负数,最大子序列的第一项必须是正数,

//否则最大子序列后面的数加起来再加上第一项的负数,其和肯定不是最大的;

//3、如果整个序列都是负数,那么最大子序列的和是0;

//全负数序列很简单,不举例

$arr=array(-2,1,3,9,-4,2,3,5,-3,-4,1,3);

$thissum=0;

$maxsum=0;

$start=0;//记录子序列的起始下标

$end=0;//记录子序列的结束下标

for($i=0;$i

$thissum+=$arr[$i];//取得当前子序列的和

if($thissum>$maxsum){//如果当前子序列的和大于当前最大子序列的和

$maxsum=$thissum;//改变当前最大子序列的和

$end=$i;

}else if($thissum<0){//如果当前子序列的和小于0,则把下一个元素值假定为最大子序列的第一项,这里可以保证最大自序列的第一项一定是正数

$thissum=0;//前提这个序列不全是负数

$start=$i+1;

}

}

$parr=array($start,$end,$maxsum);

list($start,$end,$maxsum)=$parr;

print_r($arr);

echo '最大子序列是:';

for($i=$start;$i<=$end;$i++){

echo $arr[$i].' ';

}

echo '
';

echo '最大子序列的和是'.$maxsum;

?>

效果如下:

Array

(

[0] => -2

[1] => 1

[2] => 3

[3] => 9

[4] => -4

[5] => 2

[6] => 3

[7] => 5

[8] => -3

[9] => -4

[10] => 1

[11] => 3

)

最大子序列是:1 3 9 -4 2 3 5
最大子序列的和是19 这样就完成了案例的要求,思路很重要!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值