需要帮助以了解php逻辑

时间:2019-06-15 12:15:05

标签: php

给出了一个非空数组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);
} 

您在初始解决方案中没有修改任何内容。它包含一个错误,我们请您对其进行修复。

检测到一些错误。

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行并修复了错误(无论它们是什么)。看来我完成了这个“任务”!

Documentation for array_count_values()