该问题最早于 1977 年提出,但是直到 1984 年才被发现了线性时间的最优解法。
题目要求
给定一个整数数组 arr,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
function maxSubArray($arr) {
if (!count($arr)) {
return 0;
}
$dp[0] = $result = reset($arr);
for ($i = 1; $i < count($arr); $i++) {
$tmp = $dp[$i-1]+$arr[$i];
$dp[$i] = $tmp > $arr[$i] ? $tmp : $arr[$i];
$result = $dp[$i] > $result ? $dp[$i] : $result;
}
return $result;
}
$arr = [-2,8,-3,4,-1,2,1,-5,4];
echo maxSubArray($arr);
输出结果:11
登录后可发表评论