LeetCode Solutions
238. Product of Array Except Self
Time: $O(n)$ Space: $O(n)$
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
const int n = nums.size();
vector<int> ans(n); // Can also use nums as the ans array
vector<int> prefix(n, 1); // Prefix product
vector<int> suffix(n, 1); // Suffix product
for (int i = 1; i < n; ++i)
prefix[i] = prefix[i - 1] * nums[i - 1];
for (int i = n - 2; i >= 0; --i)
suffix[i] = suffix[i + 1] * nums[i + 1];
for (int i = 0; i < n; ++i)
ans[i] = prefix[i] * suffix[i];
return ans;
}
};
class Solution {
public int[] productExceptSelf(int[] nums) {
final int n = nums.length;
int[] ans = new int[n]; // Can also use nums as the ans array
int[] prefix = new int[n]; // Prefix product
int[] suffix = new int[n]; // Suffix product
prefix[0] = 1;
for (int i = 1; i < n; ++i)
prefix[i] = prefix[i - 1] * nums[i - 1];
suffix[n - 1] = 1;
for (int i = n - 2; i >= 0; --i)
suffix[i] = suffix[i + 1] * nums[i + 1];
for (int i = 0; i < n; ++i)
ans[i] = prefix[i] * suffix[i];
return ans;
}
}
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
prefix = [1] * n # Prefix product
suffix = [1] * n # Suffix product
for i in range(1, n):
prefix[i] = prefix[i - 1] * nums[i - 1]
for i in reversed(range(n - 1)):
suffix[i] = suffix[i + 1] * nums[i + 1]
return [prefix[i] * suffix[i] for i in range(n)]