题目描述:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
样例:给出数组[1, -1, -2, 1],返回 -3
1 <?php 2 /** 3 * 最小子数组 4 * 给定一个整数数组,找到一个具有最小和的子数组。返回其最小和 5 */ 6 include "./show.php";//定义了一个类似于var_dump()的方法 7 8 /* 9 * 1. 依次求取前n位的和, 那么,当然有两种情况:和为正;和为负 10 * 2. 如果和为负,那么加上第n + 1位起,之后的某段数组是有意义的。我们可以假设第n + 1位起,到第m位,和为-10,而前n位的和为-3,两个一加得-13,肯定比-10小 11 * 3. 而如果和为正,则不管再加入怎样一段数组,都是没有意义的,因为那一段被加入的数组,"不带"前n位"玩",自己会更小 12 */ 13 function min_sub_array($data) 14 { 15 if(empty($data)) 16 { 17 return false; 18 } 19 $min_sum = $data[0]; 20 $sum = 0; 21 foreach($data as $v) 22 { 23 $sum += $v; 24 if($sum < $min_sum) 25 { 26 $min_sum = $sum; 27 } 28 if($sum > 0) 29 { 30 $sum = 0; 31 } 32 } 33 return $min_sum; 34 } 35 36 $arr = [1, -1, -2, 1]; 37 $res = min_sub_array($arr); 38 show($res);