Product of Array Except Self (original) (raw)

Last Updated : 27 Jan, 2026

Given an array arr[] of n integers, construct a **product array res[] (of the same size) such that res[i] is equal to the product of all the elements of arr[] except arr[i].

**Example:

**Input: arr[] = [10, 3, 5, 6, 2]
**Output: [180, 600, 360, 300, 900]
**Explanation:
For i=0, res[i] = 3 * 5 * 6 * 2 is 180.
For i = 1, res[i] = 10 * 5 * 6 * 2 is 600.
For i = 2, res[i] = 10 * 3 * 6 * 2 is 360.
For i = 3, res[i] = 10 * 3 * 5 * 2 is 300.
For i = 4, res[i] = 10 * 3 * 5 * 6 is 900.

**Input: arr[] = [12, 0]
**Output: [0, 12]
**Explanation:
For i = 0, res[i] = 0.
For i = 1, res[i] = 12.

Try It Yourselfredirect icon

Table of Content

[Naive Approach] Using Nested Loops - O(n^2) Time and O(n) Space

The idea is to compute the product of all elements except the current one by fixing the index and multiplying all other elements in the array. Doing this for every position generates the required result array.

C++ `

#include #include using namespace std;

vector productExceptSelf(vector& arr) { int n = arr.size();

// Fill result array with 1
vector<int> res(n, 1);

for (int i = 0; i < n; i++) {
  
    // Compute product of all elements except arr[i]
    for (int j = 0; j < n; j++) {
        if (i != j) 
            res[i] *= arr[j];
    }
}

return res;

}

int main() { vector arr = {10, 3, 5, 6, 2}; vector res = productExceptSelf(arr); for (int val : res) cout << val << " "; return 0; }

C

#include <stdio.h>

void productExceptSelf(int arr[], int n, int res[]) {

// Initialize result array as 1
for (int i = 0; i < n; i++) {
    res[i] = 1;
}

for (int i = 0; i < n; i++) {
  
      // Compute product of all elements except arr[i]
    for (int j = 0; j < n; j++) {
        if (i != j) {
            res[i] *= arr[j];
        }
    }
}

}

int main() { int arr[] = {10, 3, 5, 6, 2}; int n = sizeof(arr) / sizeof(arr[0]); int res[n];

productExceptSelf(arr, n, res);

for (int i = 0; i < n; i++) {
    printf("%d ", res[i]);
}

return 0;

}

Java

import java.util.Arrays; class GfG {

static int[] productExceptSelf(int[] arr) {
    int n = arr.length;

    // Initialize the result array as 1
    int[] res = new int[n];
    Arrays.fill(res, 1);
    for (int i = 0; i < n; i++) {

        // Compute the product of all except arr[i]
        for (int j = 0; j < n; j++) {
            if (i != j) {
                res[i] *= arr[j];
            }
        }
    }

    return res;
}

public static void main(String[] args) {
    int[] arr = {10, 3, 5, 6, 2};
    int[] res = productExceptSelf(arr);
    for (int val : res) {
        System.out.print(val + " ");
    }
}

}

Python

def productExceptSelf(arr): n = len(arr)

# Initialize the result list as 1
res = [1] * n

for i in range(n):
    
    # Compute the product of all except arr[i]
    for j in range(n):
        if i != j:
            res[i] *= arr[j]

return res

if name == "main": arr = [10, 3, 5, 6, 2] res = productExceptSelf(arr) print(" ".join(map(str, res)))

C#

using System;

class GfG {

static int[] productExceptSelf(int[] arr) {
    int n = arr.Length;
    int[] res = new int[n];
    Array.Fill(res, 1);

    // Compute product of all elements except arr[i]
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i != j) {
                res[i] *= arr[j];
            }
        }
    }

    return res;
}

static void Main(string[] args) {
    int[] arr = {10, 3, 5, 6, 2};
    int[] res = productExceptSelf(arr);
    
    foreach (int val in res) {
        Console.Write(val + " ");
    }
}

}

JavaScript

function productExceptSelf(arr) { let n = arr.length; let res = new Array(n).fill(1);

// Compute product of all elements except arr[i]
for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
        if (i !== j) {
            res[i] *= arr[j];
        }
    }
}

return res;

}

// Driver code let arr = [10, 3, 5, 6, 2]; let res = productExceptSelf(arr); console.log(res.join(" "));

`

Output

180 600 360 300 900

**[Better approach] Using Prefix and Suffix Array - O(n) Time and O(n) Space

The idea is to precompute the prefix and suffix products and store them in two arrays. Now we can find the product of array except i-th element, by using these precomputed arrays in constant time.
product of array except i-th element = prefProduct[i] * suffProduct[i]

prefProduct[i] stores product of all elements before i-th index in the array.
suffProduct[i] stores product of all elements after i-th index in the array.

C++ `

#include #include using namespace std;

vector productExceptSelf(vector &arr) { int n = arr.size(); vector prefProduct(n), suffProduct(n), res(n);

// Construct the prefProduct array
prefProduct[0] = 1;
for (int i = 1; i < n; i++)
    prefProduct[i] = arr[i - 1] * prefProduct[i - 1];

// Construct the suffProduct array
suffProduct[n - 1] = 1;
for (int j = n - 2; j >= 0; j--)
    suffProduct[j] = arr[j + 1] * suffProduct[j + 1];

// Construct the result array using
// prefProduct[] and suffProduct[]
for (int i = 0; i < n; i++)
    res[i] = prefProduct[i] * suffProduct[i];

return res; 

}

int main() { vector arr = {10, 3, 5, 6, 2}; vector res = productExceptSelf(arr);

for (int val : res)
    cout << val << " ";

}

Java

import java.util.Arrays;

class GfG {

static int[] productExceptSelf(int[] arr) {
    int n = arr.length;
    int[] prefProduct = new int[n];
    int[] suffProduct = new int[n];
    int[] res = new int[n];

    // Construct the prefProduct array
    prefProduct[0] = 1;
    for (int i = 1; i < n; i++)
        prefProduct[i] = arr[i - 1] * prefProduct[i - 1];

    // Construct the suffProduct array
    suffProduct[n - 1] = 1;
    for (int j = n - 2; j >= 0; j--)
        suffProduct[j] = arr[j + 1] * suffProduct[j + 1];

    // Construct the result array using
    // prefProduct[] and suffProduct[]
    for (int i = 0; i < n; i++)
        res[i] = prefProduct[i] * suffProduct[i];

    return res;
}

public static void main(String[] args) {
    int[] arr = {10, 3, 5, 6, 2};
    int[] res = productExceptSelf(arr);

    System.out.println(Arrays.toString(res));
}

}

Python

def productExceptSelf(arr): n = len(arr) prefProduct = [1] * n suffProduct = [1] * n res = [0] * n

# Construct the prefProduct array
for i in range(1, n):
    prefProduct[i] = arr[i - 1] * prefProduct[i - 1]

# Construct the suffProduct array
for j in range(n - 2, -1, -1):
    suffProduct[j] = arr[j + 1] * suffProduct[j + 1]

# Construct the result array using
# prefProduct[] and suffProduct[]
for i in range(n):
    res[i] = prefProduct[i] * suffProduct[i]

return res

if name == 'main': arr = [10, 3, 5, 6, 2] res = productExceptSelf(arr) print(res)

C#

using System;

class GFG {

static int[] productExceptSelf(int[] arr) {
    int n = arr.Length;
    int[] prefProduct = new int[n];
    int[] suffProduct = new int[n];
    int[] res = new int[n];

    // Construct the prefProduct array
    prefProduct[0] = 1;
    for (int i = 1; i < n; i++)
        prefProduct[i] = arr[i - 1] * prefProduct[i - 1];

    // Construct the suffProduct array
    suffProduct[n - 1] = 1;
    for (int j = n - 2; j >= 0; j--)
        suffProduct[j] = arr[j + 1] * suffProduct[j + 1];

    // Construct the result array using
    // prefProduct[] and suffProduct[]
    for (int i = 0; i < n; i++)
        res[i] = prefProduct[i] * suffProduct[i];

    return res;
}

static void Main() {
    int[] arr = {10, 3, 5, 6, 2};
    int[] res = productExceptSelf(arr);

    Console.WriteLine(string.Join(" ", res));
}

}

JavaScript

function productExceptSelf(arr) { const n = arr.length; const prefProduct = new Array(n).fill(1); const suffProduct = new Array(n).fill(1); const res = new Array(n);

// Construct the prefProduct array
for (let i = 1; i < n; i++) {
    prefProduct[i] = arr[i - 1] * prefProduct[i - 1];
}

// Construct the suffProduct array
for (let j = n - 2; j >= 0; j--) {
    suffProduct[j] = arr[j + 1] * suffProduct[j + 1];
}

// Construct the result array using
// prefProduct[] and suffProduct[]
for (let i = 0; i < n; i++) {
    res[i] = prefProduct[i] * suffProduct[i];
}

return res;

}

// Driver Code const arr = [10, 3, 5, 6, 2]; const res = productExceptSelf(arr); console.log(res.join(" "));

`

Output

180 600 360 300 900

**[Efficient Approach] Using Product Array - O(n) Time and O(1) Space

The idea is to handle two special cases of the input array: when it contains zero(s) and when it doesn't. If the array has no zeros, product of array at any index (excluding itself) can be calculated by dividing the total product of all elements by the current element.

#include #include using namespace std;

vector productExceptSelf(vector &arr) { int zeros = 0, idx = -1; int prod = 1;

// Count zeros and track the index of the zero
for (int i = 0; i < arr.size(); ++i) {
    if (arr[i] == 0) {
        zeros++;
        idx = i;
    } else {
        prod *= arr[i];
    }
}

vector<int> res(arr.size(), 0);

// If no zeros, calculate the product for all elements
if (zeros == 0) {
    for (int i = 0; i < arr.size(); i++)
        res[i] = prod / arr[i];
}
// If one zero, set product only at the zero's index
else if (zeros == 1)
    res[idx] = prod;

return res;

}

int main() { vector arr = {10, 3, 5, 6, 2}; vector res = productExceptSelf(arr);

for (int val : res)
    cout << val << " ";

}

Java

import java.util.Arrays;

class GfG {

static int[] productExceptSelf(int[] arr) {
    int zeros = 0, idx = -1, prod = 1;
    int n = arr.length;

    // Count zeros and track the index of the zero
    for (int i = 0; i < n; i++) {
        if (arr[i] == 0) {
            zeros++;
            idx = i;
        } else {
            prod *= arr[i];
        }
    }

    int[] res = new int[n];
    Arrays.fill(res, 0);

    // If no zeros, calculate the product for all elements
    if (zeros == 0) {
        for (int i = 0; i < n; i++) 
            res[i] = prod / arr[i];
    }
    // If one zero, set product only at the zero's index
    else if (zeros == 1)
        res[idx] = prod;

    return res;
}

public static void main(String[] args) {
    int[] arr = {10, 3, 5, 6, 2};
    int[] res = productExceptSelf(arr);

    for (int val : res)
        System.out.print(val + " ");
}

}

Python

def productExceptSelf(arr): zeros = 0 idx = -1 prod = 1

# Count zeros and track the index of the zero
for i in range(len(arr)):
    if arr[i] == 0:
        zeros += 1
        idx = i
    else:
        prod *= arr[i]

res = [0] * len(arr)

# If no zeros, calculate the product for all elements
if zeros == 0:
    for i in range(len(arr)):
        res[i] = prod // arr[i]
# If one zero, set product only at the zero's index
elif zeros == 1:
    res[idx] = prod

return res

if name == "main": arr = [10, 3, 5, 6, 2] res = productExceptSelf(arr) print(" ".join(map(str, res)))

C#

using System;

class GfG { static int[] productExceptSelf(int[] arr) { int zeros = 0, idx = -1, prod = 1; int n = arr.Length;

    // Count zeros and track the index of the zero
    for (int i = 0; i < n; i++) {
        if (arr[i] == 0) {
            zeros++;
            idx = i;
        } else {
            prod *= arr[i];
        }
    }

    int[] res = new int[n];
    Array.Fill(res, 0);

    // If no zeros, calculate the product for all elements
    if (zeros == 0) {
        for (int i = 0; i < n; i++) 
            res[i] = prod / arr[i];
    }
    // If one zero, set product only at the zero's index
    else if (zeros == 1)
        res[idx] = prod;

    return res;
}

static void Main(string[] args) {
    int[] arr = {10, 3, 5, 6, 2};
    int[] res = productExceptSelf(arr);

    Console.WriteLine(string.Join(" ", res));
}

}

JavaScript

function productExceptSelf(arr) { let zeros = 0, idx = -1, prod = 1;

// Count zeros and track the index of the zero
for (let i = 0; i < arr.length; i++) {
    if (arr[i] === 0) {
        zeros++;
        idx = i;
    } else {
        prod *= arr[i];
    }
}

let res = new Array(arr.length).fill(0);

// If no zeros, calculate the product for all elements
if (zeros === 0) {
    for (let i = 0; i < arr.length; i++) 
        res[i] = Math.floor(prod / arr[i]);
}
// If one zero, set product only at the zero's index
else if (zeros === 1)
    res[idx] = prod;

return res;

}

// Driver Code let arr = [10, 3, 5, 6, 2]; let res = productExceptSelf(arr); console.log(res.join(" "));

`

Output

180 600 360 300 900

**Other Mathematical Approaches: Please refer **A product array puzzle for more approaches that use log and pow to compute the required result without division operator.

**Related Problem: