A php solution to a question "find the first pair that adds up to 10". Refresh for another random array.
Answer by Rachel C
[2, 2, 10, 8, 10, 5]
<?php
# randomly generate an array
$arrayLength = rand(3, 20);
$arr = array();
for ($i = 0; $i < $arrayLength; $i++) {
array_push($arr, rand(0, 10));
}
print "[";
for ($i = 0; $i < $arrayLength; $i++) {
if ($i > 0) print ", ";
print $arr[$i];
}
print "]";
print "
";
$match = getFirstPair($arr);
printMatch($match);
print "
Other pair --
";
$match = getFirstPairDouble($arr);
printMatch($match);
function printMatch($match) {
if (count($match) == 2) {
print "First pair = " . $match[0] . ", " . $match[1] . ".";
} else {
print "No pair that adds to 10.";
}
}
function getFirstPair($arr) {
$hashMap = array();
for ($i = 0; $i < 11; $i++) {
$hashMap[$i] = -1;
}
for ($i = 0; $i < count($arr); $i++) {
$value = $arr[$i];
$match = 10 - $value;
if ($hashMap[$match] >= 0) {
return array($hashMap[$match], $i);
}
if ($hashMap[$value] == -1) $hashMap[$value] = $i;
}
}
function getFirstPairDouble($arr) {
for ($i = 1; $i < count($arr); $i++) {
for ($j = 0; $j < $i; $j++) {
if ($arr[$i] + $arr[$j] == 10) {
return array($j, $i);
}
}
}
}
?>