1. <?php
    2. class Solution {
    3. /**
    4. * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
    5. *
    6. * 输入: [-2,1,-3,4,-1,2,1,-5,4]
    7. * 输出: 6
    8. * 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
    9. *
    10. *
    11. *
    12. * 动态规划:
    13. * 1. 状态定义:$dp[i] 前i个数(包括i)中的最大连续子数组的和
    14. * 2. 状态转移方程:$dp[$i] = $dp[$i - 1] < 0 ? $nums[$i] : $dp[$i - 1] + $nums[$i]
    15. *
    16. * @param Integer[] $nums
    17. * @return Integer
    18. */
    19. public function maxSubArray($nums) {
    20. if (!$nums) return 0;
    21. $max = $dp[0] = $nums[0];
    22. for ($i = 1; $i < count($nums); $i++) {
    23. $dp[$i] = $dp[$i - 1] < 0 ? $nums[$i] : $dp[$i - 1] + $nums[$i];
    24. $max = max($max, $dp[$i]);
    25. }
    26. return $max;
    27. }
    28. }
    29. $nums = [-2,1,-3,4,-1,1,2,1,-5,4,2,1];
    30. $cls = new Solution();
    31. $r = $cls->maxSubArray($nums);
    32. echo $r;