给出了一个非空数组A,该数组由N个整数组成,并以非降序排序(即A [0] A [1] A [N-1])。此数组的前导是出现在A的一半以上元素中的值。 您将获得一个函数的实现: 功能解($ A); 如果给定一个由N个整数组成的非空数组A(以非降序排列),则返回数组A的前导。如果数组A不包含前导,则函数应返回-1。 例如,给定的数组A由十个元素组成,这样:A [0] = 2 A [1] = 2 A [2] = 2 A [3] = 2 A [4] = 2 A [5] = 3 A [6] = 4 A [7] = 4 A [8] = 4 A [9] = 6 该函数应返回-1,因为最常出现的值 经常在数组中出现2次,发生5次,而5次不超过10次的一半。 给定数组A包含五个元素,使得: A [0] = 1 A [1] = 1 A [2] = 1 A [3] = 1 A [4] = 50 该函数应返回1。 附加的代码在某些输入上仍然不正确。尽管有错误,代码仍可以为示例测试用例提供正确的答案。练习的目的是发现并修复实施中的错误。您最多可以修改三行。 假使,假设: •N是在[1..100,0001; •数组A的每个元素都是[0..2,147,483,647J范围内的整数; •数组A以非降序排序。 在您的解决方案中,专注于正确性。解决方案的性能将不是评估的重点。
function solution(&$A) {
$n = sizeof($A);
$L = array_pad(array(), $n + 1, -1);
for ($i = 0; $i < $n; $i++) {
$L[$i + 1] = $A[$i];
}
$count = 0;
$pos = (int) (($n + 1) / 2);
$candidate = $L[$pos];
for ($i = 1; $i <= $n; $i++) {
if ($L[$i] == $candidate)
$count = $count + 1;
}
if ($count > $pos)
return $candidate;
return (-1);
}
您在初始解决方案中没有修改任何内容。它包含一个错误,我们请您对其进行修复。
检测到一些错误。
答案 0 :(得分:0)
这显然不是您的作业期望的答案,但它在技术上符合描述。
更改行,如下所示:
- $n = sizeof($A);
+ /* $n = sizeof($A);
- return $candidate;
+ return $candidate; */
- return (-1);
+ $count = array_count_values($A); arsort($count); return array_values($count)[0] > count($A)/2 ? array_keys($count)[0] : -1;
我的意思是,嘿,他们特别指出,重点是正确性,而不是“可读性”,“可维护性”等其他重要事项。此外,我只更改了3行并修复了错误(无论它们是什么)。看来我完成了这个“任务”!