给定一个数组,我想显示总和等于K的不同对元素的计数-
我已经编写了如下代码,但是我无法充分利用array_diff:

<?PHP
function numberOfPairs($a, $k) {
    $cnt = 0;
    for($i=0; $i<count($a); $i++){
        for($j=$i; $j<count($a); $j++){
            if($a[$i]+$a[$j] == $k){
                $arrRes[$i][0] = $a[$i];
                $arrRes[$i][1] = $a[$j];
                $cnt++;
            }
        }
    }
    sort($arrRes);
    //print $cnt;
    $d = $cnt;
    for($i=0; $i<count($arrRes); $i++){
        for($j=0; $j<count($arrRes); $j++){
            $diff = array_diff($arrRes[$i], $arrRes[$j]);
            if($diff == null)
                $d += 1;
        }
    }
    print $d;
}

$a = [6,6,3,9,3,5,1];
$k = 12;
numberOfPairs($a, $k);
?>


在这里,总和等于12的输出数组是,即$ arrRes的结果是-

[0] => Array ( [0] => 3 [1] => 9 )
[1] => Array ( [0] => 6 [1] => 6 )
[2] => Array ( [0] => 6 [1] => 6 )
[3] => Array ( [0] => 9 [1] => 3 )


计数为4,但计数应为2,因为(6,6)和(3,9)是唯一不同的对。

最佳答案

您可以使用已用数字创建一个平面数组,然后进行检查,以免在in_array中再次使用它们。

function numberOfPairs($a, $k) {
    $cnt = 0;
    $used=[];
    for($i=0; $i<count($a); $i++){
        for($j=$i; $j<count($a); $j++){
            if($a[$i]+$a[$j] == $k && !in_array($a[$i], $used) && !in_array($a[$i],$used)){
               $arrRes[$i][0] = $a[$i];
               $arrRes[$i][1] = $a[$j];
               $used[] = $a[$i];
               $used[] = $a[$j];
               $used = array_unique($used);
               $cnt++;
            }
        }
    }
    sort($arrRes);
    //print $cnt;
    // Not sure what the code below does, but I just left it the way it was.
    $d = $cnt;
    for($i=0; $i<count($arrRes); $i++){
        for($j=0; $j<count($arrRes); $j++){
            $diff = array_diff($arrRes[$i], $arrRes[$j]);
            if($diff == null)
                $d += 1;
        }
    }
    print $d;
}

$a = [6,6,3,9,3,5,1];
$k = 12;
numberOfPairs($a, $k);


在这里尝试https://3v4l.org/lDe5V

关于php - 查找总和等于“K”的数字对的数量-PHP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48040469/

10-09 20:11