vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> out;
for (int i = 0; i < n; i++) {
int product = 1;
for (int j = 0; j < n; j++) {
if (j != i) product *= nums[j];
}
out.push_back(product);
}
return out;
}
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] out = new int[n];
for (int i = 0; i < n; i++) {
int product = 1;
for (int j = 0; j < n; j++) {
if (j != i) product *= nums[j];
}
out[i] = product;
}
return out;
}
def product_except_self(nums: list[int]) -> list[int]:
n = len(nums)
out: list[int] = []
for i in range(n):
product = 1
for j in range(n):
if j != i: product *= nums[j]
out.append(product)
return out
function productExceptSelf(nums: number[]): number[] {
const n = nums.length;
const out: number[] = [];
for (let i = 0; i < n; i++) {
let product = 1;
for (let j = 0; j < n; j++) {
if (j !== i) product *= nums[j];
}
out.push(product);
}
return out;
}
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> prefix(n, 1);
vector<int> suffix(n, 1);
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];
vector<int> out(n);
for (int i = 0; i < n; i++) out[i] = prefix[i] * suffix[i];
return out;
}
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] prefix = new int[n]; Arrays.fill(prefix, 1);
int[] suffix = new int[n]; Arrays.fill(suffix, 1);
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];
int[] out = new int[n];
for (int i = 0; i < n; i++) out[i] = prefix[i] * suffix[i];
return out;
}
def product_except_self(nums: list[int]) -> list[int]:
n = len(nums)
prefix = [1] * n
suffix = [1] * n
for i in range(1, n): prefix[i] = prefix[i - 1] * nums[i - 1]
for i in range(n - 2, -1, -1): suffix[i] = suffix[i + 1] * nums[i + 1]
return [prefix[i] * suffix[i] for i in range(n)]
function productExceptSelf(nums: number[]): number[] {
const n = nums.length;
const prefix = new Array<number>(n).fill(1);
const suffix = new Array<number>(n).fill(1);
for (let i = 1; i < n; i++) prefix[i] = prefix[i - 1] * nums[i - 1];
for (let i = n - 2; i >= 0; i--) suffix[i] = suffix[i + 1] * nums[i + 1];
return nums.map((_, i) => prefix[i] * suffix[i]);
}
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> out(n, 1);
int left = 1;
for (int i = 0; i < n; i++) {
out[i] = left;
left *= nums[i];
}
int right = 1;
for (int i = n - 1; i >= 0; i--) {
out[i] *= right;
right *= nums[i];
}
return out;
}
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] out = new int[n]; Arrays.fill(out, 1);
int left = 1;
for (int i = 0; i < n; i++) {
out[i] = left;
left *= nums[i];
}
int right = 1;
for (int i = n - 1; i >= 0; i--) {
out[i] *= right;
right *= nums[i];
}
return out;
}
def product_except_self(nums: list[int]) -> list[int]:
n = len(nums)
out = [1] * n
left = 1
for i in range(n):
out[i] = left
left *= nums[i]
right = 1
for i in range(n - 1, -1, -1):
out[i] *= right
right *= nums[i]
return out
function productExceptSelf(nums: number[]): number[] {
const n = nums.length;
const out = new Array<number>(n).fill(1);
let left = 1;
for (let i = 0; i < n; i++) {
out[i] = left;
left *= nums[i];
}
let right = 1;
for (let i = n - 1; i >= 0; i--) {
out[i] *= right;
right *= nums[i];
}
return out;
}
vector<int> productExceptSelf(const vector<int>& nums) {
int n = nums.size();
vector<int> out(n, 0);
int zeros = 0, zeroAt = -1, product = 1;
for (int i = 0; i < n; i++) {
if (nums[i] == 0) { zeros++; zeroAt = i; }
else product *= nums[i];
}
if (zeros > 1) return out;
if (zeros == 1) { out[zeroAt] = product; return out; }
int left = 1;
for (int i = 0; i < n; i++) { out[i] = left; left *= nums[i]; }
int right = 1;
for (int i = n - 1; i >= 0; i--) { out[i] *= right; right *= nums[i]; }
return out;
}
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] out = new int[n];
int zeros = 0, zeroAt = -1, product = 1;
for (int i = 0; i < n; i++) {
if (nums[i] == 0) { zeros++; zeroAt = i; }
else product *= nums[i];
}
if (zeros > 1) return out;
if (zeros == 1) { out[zeroAt] = product; return out; }
int left = 1;
for (int i = 0; i < n; i++) { out[i] = left; left *= nums[i]; }
int right = 1;
for (int i = n - 1; i >= 0; i--) { out[i] *= right; right *= nums[i]; }
return out;
}
def product_except_self(nums: Sequence[int]) -> list[int]:
n = len(nums)
out = [0] * n
zeros, zero_at, product = 0, -1, 1
for i in range(n):
if nums[i] == 0:
zeros += 1
zero_at = i
else: product *= nums[i]
if zeros > 1: return out
if zeros == 1:
out[zero_at] = product
return out
left = 1
for i in range(n):
out[i] = left
left *= nums[i]
right = 1
for i in range(n - 1, -1, -1):
out[i] *= right
right *= nums[i]
return out
function productExceptSelf(nums: ArrayLike<number>): Int32Array {
const n = nums.length;
const out = new Int32Array(n);
let zeros = 0, zeroAt = -1, product = 1;
for (let i = 0; i < n; i++) {
if (nums[i] === 0) { zeros++; zeroAt = i; }
else product *= nums[i];
}
if (zeros > 1) return out;
if (zeros === 1) { out[zeroAt] = product; return out; }
let left = 1;
for (let i = 0; i < n; i++) { out[i] = left; left *= nums[i]; }
let right = 1;
for (let i = n - 1; i >= 0; i--) { out[i] *= right; right *= nums[i]; }
return out;
}