美文网首页
动态规划(案例三,数组最大连续子序列和,同时记录是哪些元素组成的

动态规划(案例三,数组最大连续子序列和,同时记录是哪些元素组成的

作者: designer | 来源:发表于2020-12-26 17:40 被阅读0次
<?php
/**
 * @Author: fql
 * @Email: fangqiulin4923@gmail.com
 * @Date: 2020-12-26 13:30
 */

namespace fql\aglorthim\dynamic;

/**
 * Class MaxContinueSum
 * @package fql\aglorthim\dynamic
 * @desc  数组最大连续子序列和,同时记录是哪些元素组成的
 */
class MaxContinueSum
{
    private $arr;
    private $elem;

    public function __construct(array $arr)
    {
        $this->arr = $arr;
    }

    public function compute(){
        $len = count($this->arr);
        if($len < 1){
            return 0;
        }
        $currentArr[] = $this->arr[0]; //初始最大值时的元素
        $maxArray  = $this->arr[0];
        $max = $this->arr[0];  //初始最大值
        $sum = $this->arr[0];  //前i个求和
        for($i = 1; $i < $len; $i++){
            $sum = $sum + $this->arr[$i];
            //如果前i个元素和小于第个元素的值
            if($sum < $this->arr[$i]){
                $sum = $this->arr[$i];
                $currentArr=[];
            }
            $currentArr[] = $this->arr[$i];
            if($sum > $max){
                $max = $sum;
            }

        }
        $this->elem = $currentArr;

        return $max;
    }

    public function getElem()
    {
        return $this->elem;
    }
}

$arr = [6,-1,3,-4,-6,9,2,-2,5,0];
$computMax = new MaxContinueSum($arr);
echo $computMax->compute();
print_r($computMax->getElem()) ;

相关文章

网友评论

      本文标题:动态规划(案例三,数组最大连续子序列和,同时记录是哪些元素组成的

      本文链接:https://www.haomeiwen.com/subject/kymgnktx.html