Files
Leetcode-100/10-238.c
2025-08-22 00:22:53 +08:00

42 lines
1.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
int *left = (int *)malloc(numsSize * sizeof(int));
int *right = (int *)malloc(numsSize * sizeof(int));
int par_prod = 1;
for (int i = 0; i < numsSize; ++i) {
par_prod *= nums[i];
left[i] = par_prod;
}
par_prod = 1;
for (int i = numsSize - 1; i >= 0; --i) {
par_prod *= nums[i];
right[i] = par_prod;
}
int *result = (int *)malloc(numsSize * sizeof(int));
result[0] = right[1];
result[numsSize - 1] = left[numsSize - 2];
for (int i = 1; i < numsSize - 1; ++i) {
result[i] = left[i - 1] * right[i + 1];
}
*returnSize = numsSize;
return result;
}
int main() {
int nums[] = {1, 2, 3, 4};
int result_size;
int *result = productExceptSelf(nums, sizeof(nums) / sizeof(int), &result_size);
for (int i = 0; i < result_size; ++i) {
printf("%d ", result[i]);
}
printf("\n");
free(result);
return 0;
}