42 lines
1.1 KiB
C
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;
|
|
} |