#include <iostream>
#include <vector>
std::vector<int> productExceptSelf(const std::vector<int>& nums) {
int size = nums.size();
std::vector<int> answer(size, 1);
// Prefix products
int prefix = 1;
for (int i = 0; i < size; i++) {
answer[i] = prefix;
prefix *= nums[i];
// 1 5 10 30
}
// Suffix products
int suffix = 1;
for (int i = size - 1; i >= 0; i--) {
answer[i] *= suffix;
suffix *= nums[i]; // 4 12 24 120
// 24 (24*1) 60 (12*5) 40 (10*4) 30 (30*1)
}
return answer;
}
int main() {
std::vector<int> arr = {5, 2, 3, 4};
std::vector<int> result = productExceptSelf(arr);
std::cout << "Result: ";
for (int x : result) {
std::cout << x << " ";
}
}
/*
run:
Result: 24 60 40 30
*/