最大子序和:
前缀和算法:
php,32ms。
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function maxSubArray($nums) {
$re = $nums[0];
$sum = 0;
foreach($nums as $k => $v){
if($sum > 0){
$sum += $v;
}else{
$sum = $v;
}
$re = max($re,$sum);
}
return $re;
}
}
动态规划算法:
php,32ms。
状态转移方程为:
$dp[$i] = max($dp[$i-1]+$nums[$i],$nums[$i]);
当前最大和两种情况:
- i-1的最大和大于零,dp[i]的最大和为dp[i-1]+nums[i]
- i-1的最大和小于零,dp[i]的最大和为nums[i]
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function maxSubArray($nums) {
$dp = [];
$dp[0] = $nums[0];
for($i = 1;$i < count($nums);$i++){
$dp[$i] = max($dp[$i-1]+$nums[$i],$nums[$i]);
}
return max($dp);
}
}