Solution #1:
function productArray($arr, $n)
{
// Base case
if ($n == 1) {
echo "0";
return;
}
$left = [];
$right = [];
$prod = [];
$left[0] = 1;
$right[$n - 1] = 1;
// Construct the left array
for ($i = 1; $i < $n; $i++)
$left[$i] = $arr[$i - 1] * $left[$i - 1];
// Construct the right array
for ($j = $n - 2; $j >= 0; $j--)
$right[$j] = $arr[$j + 1] * $right[$j + 1];
// Construct the product array
// using left[] and right[]
for ($i = 0; $i < $n; $i++)
$prod[$i] = $left[$i] * $right[$i];
// print the constructed prod array
for ($i = 0; $i < $n; $i++)
echo $prod[$i], " ";
return;
}
// Driver Code
$arr = [2, 3, 5, 4, 6];
$n = count($arr);
echo "The product array is : \n";
productArray($arr, $n);
Solution #2:
function productExceptSelf($nums) {
// Determine the length of the input list 'nums'.
$num_length = count($nums);
// Initialize the answer list with 1's of the same length as 'nums'.
$answer = array_fill(0, $num_length, 1);
// 'left' will represent the cumulative product of elements to the left of the current element.
$left = 1;
for ($i = 0; $i < $num_length; $i++) {
// Store the cumulative product in the 'answer' list at the current index 'i'.
$answer[$i] = $left;
// Update 'left' to include the product of the current element.
$left *= $nums[$i];
}
// 'right' will represent the cumulative product of elements to the right of the current element.
$right = 1;
for ($i = $num_length - 1; $i >= 0; $i--) {
// Multiply the existing value in 'answer' by the 'right' value which is the product of elements to the right of 'i'.
$answer[$i] *= $right;
// Update 'right' to include the product of the current element.
$right *= $nums[$i];
}
// Return the 'answer' list which now contains the products except self.
return $answer;
}
print_r(productExceptSelf([2, 3, 4, 5]));
Top comments (0)