问题描述
求子数组的最大和
题目描述:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
关于连续子数组最大和这个问题,有两种解法,一种是动态规划
解法如下:
1
2
3
4
5
6
7
8
9
10
|
function getMaxSubSum( $arr ){ $curSum = $arr [0]; $maxSum = $arr [0]; for ( $i = 1; $i < count ( $arr ); $i ++){ if ( $curSum > 0) $curSum += $arr [ $i ]; else $curSum = $arr [ $i ]; if ( $curSum > $maxSum ) $maxSum = $curSum ; } return $maxSum ; } |
还有一种是扫描法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
function getMaxSubSum( $arr ){ $curSum = 0; $maxSum = 0; for ( $i = 0; $i < count ( $arr ); $i ++ ){ $curSum += $arr [ $i ]; if ( $curSum <= 0) $curSum = 0; if ( $curSum > $maxSum ) $maxSum = $curSum ; } if ( $maxSum == 0){ $maxSum = $arr [0]; for ( $i = 1; $i < count ( $arr ); $i ++){ if ( $maxSum < $arr [ $i ] ) $maxSum = $arr [ $i ]; } } return $maxSum ; } |
原文链接:http://blog.csdn.net/zhaozonglu/article/details/46795165
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容