动态规划解法时间复杂度O(n)、空间O(1),核心是遍历中决策“延续子数组”或“重新开始”,用$currentSum和$maxSum双变量更新,PHP8.3实现简洁高效且处理空数组、全负数等边界。

直接用动态规划解,时间复杂度 O(n),空间 O(1),PHP8.3 写法简洁高效。
核心思路:边遍历边决策
每走到一个位置,判断是“接着前面的子数组”还是“从当前数重新开始”。关键变量:
- $currentSum:以当前元素结尾的最大连续和
- $maxSum:全局遇到过的最大和
更新规则:
$currentSum = max($num, $currentSum + $num)
$maxSum = max($maxSum, $currentSum)
PHP8.3 实现(带类型声明和短语法)
利用 PHP8.3 的联合类型、只读类(可选)、箭头函数风格辅助理解:
function maxSubArray(array $nums): int
{
if ($nums === []) {
throw new InvalidArgumentException('Array cannot be empty');
}
<pre class="brush:php;toolbar:false;">$currentSum = $maxSum = $nums[0];
for ($i = 1; $i <p>}</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img
src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="overflowclass">btpanel phpsite 宝塔面板PHP网站</a>
<p class="overflowclass">宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p>
</div>
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><p>// 示例调用
var_dump(maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4])); // int(6) → [4,-1,2,1]
</p>边界与易错点提醒
- 数组不能为空 —— PHP8.3 推荐显式校验并抛异常,不依赖隐式行为
- 全负数情况也能正确处理(如 [-5,-2,-8] → 返回 -2),因为每次都会取较大者
- 不要误用 array_reduce —— 累积过程无法回退,不适合该问题的状态转移逻辑
- 避免用 array_slice 遍历所有子数组(O(n²)),在大数据量下会超时
进阶:返回子数组本身(不只是和)
只需额外记录起始/结束下标:
function maxSubArrayWithIndices(array $nums): array
{
$currentSum = $maxSum = $nums[0];
$start = $end = 0;
$tempStart = 0;
<pre class="brush:php;toolbar:false;">for ($i = 1; $i $maxSum) {
$maxSum = $currentSum;
$start = $tempStart;
$end = $i;
}
}
return [
'sum' => $maxSum,
'subarray' => array_slice($nums, $start, $end - $start + 1)
];}
这个解法在 PHP8.3 下运行稳定,兼容严格类型检查,也便于单元测试覆盖各种输入场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










