#include "soln.hpp" vector Solution::productExceptSelf(vector &nums) { int n = nums.size(); vector pres(n); vector sufs(n); vector result(n); // calculate prefixes starting from second int cur = 1; for (int i = 1; i < n; i++) { pres[i] = cur * nums[i - 1]; cur = pres[i]; } // calculate suffixes starting from second last cur = 1; for (int j = n - 2; j >= 0; j--) { sufs[j] = cur * nums[j + 1]; cur = sufs[j]; } result[0] = sufs[0]; result[n - 1] = pres[n - 1]; for (int i = 1; i < n - 1; i++) { result[i] = pres[i] * sufs[i]; } return result; } bool Solution::test(vector& nums, vector& answer) { return productExceptSelf(nums) == answer; }