238. Product of Array Except Self ✅
Given an integer array nums
, return an array answer
such that answer[i]
is equal to the product of all the elements of nums
except nums[i]
.
The product of any prefix or suffix of nums
is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs in O(n)
time and without using the division operation.
Example 1:
Example 2:
Constraints:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
- The product of any prefix or suffix of
nums
is guaranteed to fit in a 32-bit integer.
Follow up: Can you solve the problem in O(1)
extra space complexity? (The output array does not count as extra space for space complexity analysis.)
Solution:
class Solution {
public int[] productExceptSelf(int[] nums) {
int[] result = new int[nums.length];
int[] prefix = new int[nums.length];
prefix[0] = 1;
for (int i = 1; i < nums.length; i++){
prefix[i] = prefix[i-1] * nums[i-1];
}
//[1, 2, 3, 4]
// 1 1 2 6
int[] postfix = new int[nums.length];
postfix[nums.length -1] = 1;
for (int i = nums.length -2; i >= 0; i--){
postfix[i] = nums[i+1] * postfix[i+1];
}
// [1, 2, 3, 4]
// 24 12 4 1
result[0] = postfix[0];
result[nums.length - 1] = prefix[nums.length -1];
for (int i = 1; i < nums.length-1; i++){
result[i] = prefix[i] * postfix[i];
}
return result;
}
}
// TC: O(n)
// SC: O(n)