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
numsis 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)