zoukankan      html  css  js  c++  java
  • php实现最大子序和算法

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4],
    输出: 6(最大子序列:4 -1 2 1 )

    第一种:

    $arr =  [-2,1,-3,4,-1,2,1,-5,4];
    
       function maxSubArray($nums) {
            for($i=1;$i<count($nums);$i++)
                $nums[$i] = max($nums[$i],$nums[$i]+$nums[$i-1]);
            return max($nums);
        }
    
    echo maxSubArray($a);

    第二种:

    $arr =  [-2,1,-3,4,-1,2,1,-5,4];
    $len = count($arr);
    $b =[];
    $b[0] = $arr[0];
    $max = $arr[0] >0 ?$arr[0]:0;
    $start_x = 0;
    for($i=1;$i<$len;$i++)
    {
        if(($b[$i-1] + $arr[$i]) > $arr[$i]){
            $b[$i] = $b[$i-1] + $arr[$i];
        }else{
            $b[$i] = $arr[$i];
            $start_x = $i; ;
        }    
        if($max < $b[$i]) {    
            $max = $b[$i];    
            $end_x = $i;
        }
    }
    print '最大子和: '.$max."
    ";
    print '开始位置: '.$start_x."	";
    print '结束位置: '.$end_x."
    ";
    print '最大子序列:';
    for($i=$start_x;$i<=$end_x;$i++){
        print $arr[$i].' ';
    }
  • 相关阅读:
    [luogu]P1852跳跳棋
    StdDraw绘图
    Java-Timer-Stop
    人之初
    单例模式--延时初始化
    ubuntu忘记密码
    QT5 TK1 串口通信
    金秋十月
    级联分类器训练-----OpenCV
    Hu矩SVM训练及检测-----OpenCV
  • 原文地址:https://www.cnblogs.com/wt645631686/p/13181413.html
Copyright © 2011-2022 走看看