我有一个名为$ 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 . "]";
}
}
}
请帮忙。
答案 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);
至于你的代码,它有几个错误:
答案 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/>";
}
?>