【问题标题】:PHP Find a pair of elements from an array whose sum equals a given numberPHP 从数组中找到一对元素,其和等于给定数字
【发布时间】:2017-11-19 18:44:14
【问题描述】:

我有一个包含从 -10 到 10(没有 0)的 n 个数字的数组。实现从总和为0的数组中返回对数量的函数。

例如:

$input = 数组 (3, 6, -3, 5, -10, 3, 10 >、17-1、-9、-8、7、7、 -7, -2, -7);

正确答案是 5(对以粗体表示)

我做了这样的东西,但它给了我 10 双:

$length = count($input) - 1;
$count = 0;

for ($i = 0; $i <= $length; $i++) {
    for ($j = $i + 1; $j <= $length; $j++) {
        if ($input[$i] + $input[$j] == 0) {
            $count++;
        }
    }
}

echo $count;

【问题讨论】:

  • 5 和 10 之间的关系是否表明了特定的东西?
  • 是的,因为正确答案应该是 5。我得到了 10,因为我的函数需要重复到最终结果
  • 如果您考虑一下为什么它会计算两次配对,您会发现您可以通过将内部循环的起始编号更改为不为 1 来解决此问题。

标签: php arrays loops


【解决方案1】:
<?php 
$input = array (3, 6, -3, 5, -10, 3, 10, 1, 7, -1, -9, -8, 7, 7, -7, -2, -7);
$length = count($input) - 1;
$count = 0;
for ($i = 0; $i <= $length; $i++){
    $flag[$i]=0;
}

for ($i = 0; $i <= $length; $i++) {
    for ($j = $i + 1; $j <= $length; $j++) {
        if ($input[$i] + $input[$j] == 0 && $flag[$i]==0 && $flag[$j]==0) {
            $count++;
            $flag[$i]=1;
            $flag[$j]=1;
        }
    }
}

echo $count;

?>

上面给出了正确的代码。由于您必须标记已用于配对的元素。例如,你有两个 +3 和一个 -3,因为你没有标记它,所以它是 2 对,它已经与现有的一对。

【讨论】:

    【解决方案2】:

    你做了两个 for 循环,所以你计算了两次。你可以做一些测试,你在函数中插入的每个输入数组都会返回一个偶数。然后在最后做$count = $count/2;

    【讨论】:

      【解决方案3】:

      您需要定义它为什么不工作 - 它是但它发现 7 + -7 6 次:所以你需要像下面的代码一样标记这个匹配已经找到 - 添加一些输出,这样你就可以看到什么是发生:

      $input = array (3, 6, -3, 5, -10, 3, 10, 1, 7, -1, -9, -8, 7, 7, -7, -2, -7);
      $length = count($input) - 1;
      $count = 0;
      $matched = array();
      
      for ($i = 0; $i < count($input); $i++) {
        echo "<br />Group ".$i.": <strong>".$input[$i]."</strong>, ";
          $groupmatch = 0;
          $matchon = "";
          for ($j = $i + 1; $j < count($input); $j++) {
              echo $input[$j].", ";
              $check = $input[$i] ."+". $input[$j];
              if ($input[$i] + $input[$j] == 0 && !array_search($check,$matched)) {
                  $count++;
                  $groupmatch++;
                  $matchon .= $check.", ";
                  array_push($matched, $check);
              }
          }
        echo "<br />Groupmatch: ".$groupmatch."<br/>";
          echo $matchon."<br />";
      }
      echo $count;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多