请教碰到的一道算法题,最大和的连续子数组
資深大佬 : guanhui07 7
给定一个整数数组 nums [-2,11,-4,13,-5,-2] ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和的连续子数组。
比如 [-2,11,-4,13,-5,-2] 返回 [11,-4,13] ,因为它和最大 是 20
注意:返回的是 子数组 而不是 最大和 整数。
改自 maxinum_subarray
要得到 起始坐标然后再切片做? 参考
大佬有話說 (4)
给定一个整数数组 nums [-2,11,-4,13,-5,-2] ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和的连续子数组。
比如 [-2,11,-4,13,-5,-2] 返回 [11,-4,13] ,因为它和最大 是 20
注意:返回的是 子数组 而不是 最大和 整数。
改自 maxinum_subarray
要得到 起始坐标然后再切片做? 参考
从贪心的角度可以证明思路正确:将一个数组拆分为两部分,最大连续数组和出现的情况只有三种:左,右,跨左右。其中跨左右的计算方式为左数组加中间部分的数组和右数组。
年代久远可能记错了,有些地方考虑不够周全。
foreach ($arr as $k => $v) {
$sum = array_sum(array_slice($arr, $k));
if ($sum >= $max) {
$max = $sum;
$record = array_slice($arr, $k);
}
}
$arr = array_splice($arr, 0, count($arr) – 1);
return $this->getBiggestSubarray($arr, $max, $record);
}