PHP数组问题

时间:2011-03-15 12:30:51

标签: php

我有一个名为$ A的数组,它只包含非零正数。

现在我需要找到任意数量的具有给定总和的不同连续子阵列。

我将用例子

解释
$A = array(1,2,3,4,5);

我要找的是5

然后有(2, 3)(5)

我尝试搜索并获得了一个python代码。我已经将它翻译成PHP,但它拒绝工作

$s = 0;
for($i = 0; $i < count($A); $i++){
     for($j=$i; $j < count($A); $j++){
         $s = $s + $A[$j];
         if($s == $sum) {
             echo "[" . $i . " " . $j . "]";
         }
     }
}

请帮忙。

5 个答案:

答案 0 :(得分:2)

  • count($A),您没有$B
  • 第一个循环中的
  • $s = 0;
  • 不要忘记$i$j是索引,它们始于0
  • 在开始搜索之前,不要忘记给$sum赋值
  • if($s > $sum)您可能希望从第二个循环中continue;
祝你好运,
阿林

答案 1 :(得分:1)

您需要在内循环开始时将$s初始化为0

for($i = 0; $i < count($A); $i++){
    $s = 0;  // CHANGE HERE.
     for($j=$i; $j < count($A); $j++){
         $s = $s + $A[$j];
         if($s == $sum) {
             echo "[" . $i . " " . $j . "]";
         }
     }
}

答案 2 :(得分:1)

这将有效:

$A = array(1, 2, 3, 4, 5);
$size = count($A);
$sum = 5;
$solution = array();
for($i = 0; $i < $size; $i++) {
    $tempsum = 0;
    for($j=$i; $j < $size && $tempsum < $sum; $j++) {
        $tempsum += $A[$j];
        if($tempsum === $sum) {
            $solution[] = array_slice($A, $i, $j - $i + 1);
        }
    }
}

var_dump($solution);

至于你的代码,它有几个错误:

  1. 每次循环时都必须重新初始化$。
  2. 数组$ B可能不存在(第二个循环停止条件)。
  3. 当子阵列的长度大于2时,它不会显示正确的结果。
  4. 没有必要将第二个循环结束,只要临时总和大于搜索到的一个,我们就可以停止。

答案 3 :(得分:1)

$a = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); // the array to search in
$b = array(); // the resulting array
$sum = 9; // the sum to search for

$w = $a; // $w is the working array which we may modify
$n = count($w); // number of elements in source array
for($i = 0; $i < $n; $i++){
    $x = 0;
    $t = array();
    if($w[$i] == $sum){
        $b[] = array($w[$i]);
    }
    if($w[$i] >= $sum){
        break;
    }
    for($j = $i; $j < $n; $j++){
        $x += $w[$j];
        $t[] = $w[$j];
        if($x == $sum){
            $b[] = $t;
        }
        if($x >= $sum){
            break; // already found the array, continue search
        }
    }
}

$b将是:

array(3) {
  [0]=>
  array(3) {
    [0]=>
    int(2)
    [1]=>
    int(3)
    [2]=>
    int(4)
  }
  [1]=>
  array(2) {
    [0]=>
    int(4)
    [1]=>
    int(5)
  }
  [2]=>
  array(1) {
    [0]=>
    int(9)
  }
}

答案 4 :(得分:1)

这样可行

<?php
    $a = array(1,2,3,4,5);

    $l = sizeof($a);

    for($i=0; $i<$l; $i++)
    {
        for($j=$i+1; $j<$l; $j++)
        {
            if($a[$i]+$a[$j] == 5)
                echo "( ".$a[$i]." , ".$a[$j]." ) <br/>";
        }
        if($a[$i]==5)
            echo "( ".$a[$i]." )<br/>";
    }
    ?>