猿问

数组匹配计数比预期少一

$ar是一双袜子。$n是 中的项目数$ar。如果它们中的任何一个匹配,我必须将数组中的每个数字与另一个匹配,它是一对。然后我必须返回匹配项目的数量。我在下面做了它,但答案比它应该的少一个。例子


n:9


ar: 10 20 20 10 10 30 50 10 20

我得到输出 2 而不是 3。


function sockMerchant($n, $ar) {

    $pair =0;

    $j=0;

    for($i=0; $i< count($ar); $i++)

    {

        for($j=$i+1; $j< count($ar); $j++)

        {

            if ( isset( $ar[$j]) && isset( $ar[$i])) {

                if ($ar[$i]== $ar[$j])

                {

                    unset($ar[$i]);

                    unset($ar[$j]);

                    $pair+=1;

                    $i=0;

                    break;

                }

            }


        }

    }

    return  count($ar);

}


白衣非少年
浏览 114回答 3
3回答

慕盖茨4494581

而不是你正在做的事情有捷径可以达到同样的目的,$temp = array_count_values($arr); // count number of occurencesecho count(array_filter($temp, function($value){ // filter in not greater than 1&nbsp;&nbsp; &nbsp; return $value > 1;}));上面的代码片段将为您提供所有对,而不仅仅是一次。这是您的代码片段的另一种选择,$temp = array_count_values($arr); // count number of occurences$e&nbsp; &nbsp; = array_reduce($temp, function ($carry, $item) {&nbsp; &nbsp; $carry += ($item > 1 ? intval($item / 2) : 0);&nbsp; &nbsp; return $carry;});echo $e;die;

呼唤远方

$ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];$pairIndex = [];$count = 0;foreach ($ar as $key => $item) {&nbsp; &nbsp; // Start comparing from the next element&nbsp; &nbsp; for ($i = ($key + 1); $i < count($ar); $i++) {&nbsp; &nbsp; &nbsp; &nbsp; if ($item == $ar[$i] && !in_array($key, $pairIndex)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pairIndex[] = $key;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pairIndex[] = $i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $count++;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}echo "Pairs: " . $count;

不负相思意

简单的例子你的数组会发生什么:$ar = array(0, 10, 20, 30, 40, 50 , 60, 70, 80, 90);$lnPointer = 2;print_r($ar);// Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 )&nbsp;echo "<HR>";echo $ar[$lnPointer];echo "<HR>";unset( $ar[$lnPointer]);print_r($ar);// Array ( [0] => 0 [1] => 10 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 )&nbsp;echo "<HR>";echo $ar[$lnPointer];取消设置后,您会得到一个未定义的索引
随时随地看视频慕课网APP
我要回答