1、题目链接:点击打开链接
2、题目:
Given an array of n integers where n > 1, nums
, return an array output
such that output[i]
is equal to the product of all the elements ofnums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
3、题目说不能使用除法,我还是用了,(⊙﹏⊙)b:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
int s,i,k,s2;
int *result=(int*)malloc(sizeof(int)*numsSize);
k=0;
s=1;s2=1;
for(i=0;i<numsSize;i++){
if(nums[i]==0){
k++;
}
else
s2*=nums[i];
s*=nums[i];
result[i]=0;
}
//printf("%d,%d,%d\n",s,s2,k);
if(k==0){
for(i=0;i<numsSize;i++)
result[i]=s/nums[i];
}
else if(k==1){
for(i=0;i<numsSize;i++)
if(nums[i]==0)
result[i]=s2;
}
*returnSize=numsSize;
return result;
}
4、参考别人的思路,然后写的代码:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
int *result=(int*)malloc(sizeof(int)*numsSize);
int *left=(int*)malloc(sizeof(int)*numsSize);
int *right=(int*)malloc(sizeof(int)*numsSize);
int i;
for(i=0;i<numsSize;i++){
if(i==0){
left[i]=1;
right[numsSize-1-i]=1;
}
else{
left[i]=left[i-1]*nums[i-1];
right[numsSize-1-i]=right[numsSize-1-i+1]*nums[numsSize-1-i+1];
}
}
for(i=0;i<numsSize;i++){
result[i]=left[i]*right[i];
// printf("%d,%d,%d\n",left[i],right[i],result[i]);
}
*returnSize=numsSize;
return result;
}