您的位置:首页 > 编程语言 > C语言/C++

238. Product of Array Except Self c语言

2016-08-08 22:02 260 查看
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 of
nums
 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: