您将获得PHP中的数组,其中包含正整数和/或递归嵌套的正整数数组。例如,它可以初始化为:
$arr = array(array(141,151,161), 2, 3, array(101, 202, array(303,404)));
编写一个函数“function MaxArray($ arr)”,它返回$ arr中包含的最大值或嵌套在$ arr中的某个数组。在示例中,返回的值应为404.
function MaxArray($arr){
static $x = 0;
foreach($arr as $array){
if(is_array($array)) $x = MaxArray($array);
else if($array > $x) $x = $array;
}
return $x;
}
//additional output just for testing
$arr = array(array(141,5651,161), 2, 45446, array(101, 202, array(303,4)));
//additional output just for testing
print MaxArray($arr);
每次运行它都有效但在线代码生成器不接受。这是一个错误还是我...?
另外在个人说明中,我想对stackoverflow上的所有人说谢谢,这样一个了不起的网站。四年前我对编程一无所知,现在我从头开始构建这个audio visual reviews,我正在用java编写android应用程序!
更新: 这个问题取自我参加的在线测试。没有显示错误信息,但代码生成器只是给出了错误答案的响应。因此,我没有标记这个问题。
我想在上诉之前检查我的解决方案。
答案 0 :(得分:1)
# so... this works well enough
$arr = array(array(141,5651,161), 2, 45446, array(101, 202, array(303,4)));
print MaxArray($arr); // outputs 45446
print "\n";
# but now...let's try it again. In the same script. *gasp!*
$arr2 = array(42);
print MaxArray($arr2); // outputs 45446 (!!!)
问题是静态变量;在调用函数之间没有清除它。所以以前的结果会影响未来这几乎肯定是不正确的,肯定会让知识渊博的人类法官拒绝你的代码。
摆脱静态变量。您可以将其作为参数传递,您可以简单地与子结果进行比较,就像这里建议的其他答案一样......或者您可以使用闭包和array_walk_recursive
来展示。 :)
function MaxArray($arr) {
$max = -1;
array_walk_recursive($arr, function($x) use (&$max) {
if ($x > $max) $max = $x;
});
return $max;
}
答案 1 :(得分:0)
<?php
$arr = [[141, 151, 161], 2, 3, [101, 202, [303, 404]]]
/**
* @param $input
* @return int
*/
function getActMax($input)
{
if ( ! is_array($input))
{
return $input;
} else
{
return findMax($input);
}
}
/**
* @param array $inputs
* @return int
*/
function findMax(array $inputs)
{
//Maybe the first item in the list is the biggest, this is our current max value
$max = getActMax(current($inputs));
foreach ($inputs as $v)
{
//If we found a bigger, change our max value
if (getActMax($v) > $max)
{
$max = getActMax($v);
}
}
return (int)$max;
}
var_dump(findMax($arr));