为了账号安全,请及时绑定邮箱和手机立即绑定

数组匹配计数比预期少一

数组匹配计数比预期少一

PHP
白衣非少年 2021-06-28 00:29:58
$ar是一双袜子。$n是 中的项目数$ar。如果它们中的任何一个匹配,我必须将数组中的每个数字与另一个匹配,它是一对。然后我必须返回匹配项目的数量。我在下面做了它,但答案比它应该的少一个。例子n:9ar: 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);}
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

而不是你正在做的事情有捷径可以达到同样的目的,


$temp = array_count_values($arr); // count number of occurences

echo count(array_filter($temp, function($value){ // filter in not greater than 1 

    return $value > 1;

}));

上面的代码片段将为您提供所有对,而不仅仅是一次。


这是您的代码片段的另一种选择,


$temp = array_count_values($arr); // count number of occurences

$e    = array_reduce($temp, function ($carry, $item) {

    $carry += ($item > 1 ? intval($item / 2) : 0);

    return $carry;

});

echo $e;die;


查看完整回答
反对 回复 2021-07-02
?
呼唤远方

TA贡献1856条经验 获得超11个赞

$ar = [10, 20, 20, 10, 10, 30, 50, 10, 20];


$pairIndex = [];

$count = 0;


foreach ($ar as $key => $item) {

    // Start comparing from the next element

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

        if ($item == $ar[$i] && !in_array($key, $pairIndex)) {

            $pairIndex[] = $key;

            $pairIndex[] = $i;

            $count++;

        }

    }

}


echo "Pairs: " . $count;


查看完整回答
反对 回复 2021-07-02
?
不负相思意

TA贡献1777条经验 获得超10个赞

简单的例子你的数组会发生什么:


$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 ) 

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 ) 

echo "<HR>";

echo $ar[$lnPointer];

取消设置后,您会得到一个未定义的索引


查看完整回答
反对 回复 2021-07-02
  • 3 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信