This tutorial will show you how to return array of products of all other numbers from a given array. Let’s say you are given an array of non-zero integers. So you have to return an output array of products of all other numbers except the number itself.

For example, an input array a[]={1, 2, 3, 4}, so the output array will be out[]={24, 12, 8, 6}.

Therefore, if we analyze the above output array, then

at array index 0, the output is formulated as 2x3x4 = 24.

at array index 1, the output is formulated as 1x3x4 = 12.

at array index 2, the output is formulated as 1x2x4 = 8.

at array index 3, the output is formulated as 1x2x3 = 6.

Let’s move on to the implementation of Java code to return array of products of all other numbers from a given array.

The implementation can be done in three ways with O(n) time complexity.

First Approach

public class ArrayProductsDiv {

	public static void main(String[] args) {
		int[] a = new int[] { 1, 2, 3, 4 };
		int out[] = new int[4];

		int p = 1;
		for (int i = 0; i < a.length; ++i) {
			p *= a[i];
		}

		for (int i = a.length - 1; i >= 0; --i) {
			out[i] = p / a[i];
		}

		for (int i = 0; i < out.length; i++) {
			System.out.println(out[i]);
		}
	}

}

So in the above code we first calculate product for all numbers in the given array. And finally we divide product by each array element and get the desired output.

Second Approach

In the first approach we used division to find out the desired results but here we find out the desired results without division.

public class ArrayProductsNoDiv {

	public static void main(String[] args) {
		int[] a = new int[] { 1, 2, 3, 4 };
		int out[] = new int[4];

		int prod = 1;
		for (int i = 0; i < a.length; ++i) {
			out[i] = prod;
			prod *= a[i];
		}

		prod = 1;
		for (int i = a.length - 1; i >= 0; --i) {
			out[i] *= prod;
			prod *= a[i];
		}

		for (int i = 0; i < out.length; i++) {
			System.out.println(out[i]);
		}
	}

}

Third Approach

In this example we will see the recursive function to get the desired output

public class ArrayProductsRecursive {

	public static void main(String[] args) {
		int[] a = new int[] { 1, 2, 3, 4 };
		product(a, 1, 0);
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}
	}

	static int product(int[] a, int prod, int n) {
		return (n == a.length) ? 1 : a[n] * (prod = product(a, a[n] * (a[n] = prod), n + 1)) + 0 * (a[n] *= prod);
	}
}

You will find more solutions here https://stackoverflow.com/questions/2680548/given-an-array-of-numbers-return-array-of-products-of-all-other-numbers-no-div

Thanks for reading.

Tags:

I am a professional Web developer, Enterprise Application developer, Software Engineer and Blogger. Connect me on Roy Tutorials | TwitterFacebook Google PlusLinkedin | Reddit

Leave a Reply

Your email address will not be published. Required fields are marked *