在数组中找到一对整数,其中Sum为PHP中的数字

时间:2017-04-21 16:42:01

标签: php arrays

我的解决方案是:

function printPairs($array, $sum) { 
    for ($i = 0; $i < count($array); $i++) { 
        $first = $array[$i]; 
        for ($j = $i + 1; $j < count($array); $j++) {
          $second = $array[$j]; 
          if (($first + $second) == $sum) { 
            echo($first.','.$second); 
          } 
       } 
    } 
}

此解决方案的复杂性为O(n ^ 2) 我们如何改进这一点,我们可以做些什么来改善PHP中的这一点。

2 个答案:

答案 0 :(得分:0)

你可以像这样重写你的功能:

function printPairs($array, $sum) { 
    $map = [];
    foreach ($array as $v) {
        if (isset($map[$sum-$v])) {
            echo $v . ',' . ($sum-$v) . "\n";
            echo ($sum-$v) . ',' . $v . "\n";
        }
        $map[$v] = 1;
    }
}

平均复杂度为O(N)

答案 1 :(得分:0)

回答这个问题不会让你更好地解决问题,你需要真正理解算法及其复杂性。如果您想获得解决问题的更多经验,可以查看https://codility.com/programmers/。针对各种课程发布了许多答案,但我强烈建议您在出去寻求课程/挑战的答案之前尽量自己解决。

因此,对于这个问题,您会得到一个整数数组和一个整数,您需要找到它们。

您可能还需要确保每个数字(数组中的索引)仅使用一次。

因此,如果您输入的是[3,7,3],则您的对只是[[3,7]]而不是[[3,7],[7,3]]

  

优化解决方案

此解决方案将被视为O(2n)或简化为O(n),因为它遵循线性时间。

function solution(array $arr, $int) {
    $results = [];
    $map = [];

    # create a map of ints and how many you have
    $size = sizeof($arr);
    for($x = 0; $x < $size; $x++) {
        $n = $arr[$x];
        if (!array_key_exists($n, $map)) {
            $map[$n] = 0;
        }
        $map[$n]++;
    }

    # loop through and find the pairs
    $size = sizeof($map);
    foreach($map as $n => $c) {
        $w = $int - $n;
        if (!array_key_exists($w, $map)) {
            continue;
        }
        $map[$n]--;
        $map[$w]--;
        # edge case when $n === $w
        if ($map[$n] < 0 || $map[$w] < 0) {
            $map[$n]++;
            $map[$w]++;
            continue;
        }

        $results[] = [$n,$w];
    }

    return $results;
}

echo json_encode(solution([], 10)) . PHP_EOL;
echo json_encode(solution([1], 10)) . PHP_EOL;
echo json_encode(solution([10], 10)) . PHP_EOL;
echo json_encode(solution([0,10], 10)) . PHP_EOL;
echo json_encode(solution([5,5], 10)) . PHP_EOL;
echo json_encode(solution([-5,15], 10)) . PHP_EOL;
echo json_encode(solution([3,7,3], 10)) . PHP_EOL;
echo json_encode(solution([3,7,3,7,1,9], 10)) . PHP_EOL;
  

输出

[]
[]
[]
[[0,10]]
[[5,5]]
[[-5,15]]
[[3,7]]
[[3,7],[7,3],[1,9]]
相关问题