To solve the problem of finding the product of all elements except the current one, we can
use a two-pass
approach.
In the first pass
,
we calculate the product of all elements to the
left of each
element
and store it
in the
resultant array
.
In the second pass
, we calculate
the product
of
all elements to the
right of each
element
and multiply it with the previously stored left product in the resultant array.
class Solution { public int[] productExceptSelf(int[] nums) { int sz = nums.length; int[] ans = new int[sz]; ans[0] = 1; for(int i=1;i<sz;i++){ ans[i] = ans[i-1]*nums[i-1]; } int right=1; for(int i=sz-2;i>=0;i--){ right = right*nums[i+1]; ans[i] = ans[i]*right; } return ans; } }
The algorithm makes two passes through the array, each taking O(n) time. Therefore, the overall time complexity is O(n).
The algorithm uses a constant amount of extra space for variables, and the output array is not counted towards the space complexity.