[leetcode-238]Product of Array Except Self(C语言)

问题描述:
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].

结题思路:存储一个left和right数组,当求元素i时,只需让left[i]*right[i]即可,题目中要求不让使用除法,事实上使用除法时还会引发除0错误等问题,更麻烦。

代码如下:40ms

int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
    int* res = (int *)malloc(sizeof(int)*numsSize);
    int* left = (int *)malloc(sizeof(int)*numsSize);//store the product of left of element i
    int* right = (int *)malloc(sizeof(int)*numsSize);//store the product of right of element i;
    int i;

    left[0] = 1;
    for(i = 1;i<numsSize;i++)
        left[i] = nums[i-1]*left[i-1];

    right[numsSize-1] = 1;
    for(i = numsSize-2;i>=0;i--)
        right[i] = nums[i+1]*right[i+1];

    for(i = 0;i<numsSize;i++)
        res[i] = left[i]*right[i];

    *returnSize = numsSize;    
    return res;
}

代码2:题目中问能否用常数空间复杂度完成工作。无法是将left和right的信息保存在res中,
修改代码如下:40ms

int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
    int* res = (int *)malloc(sizeof(int)*numsSize);
    int i;

    res[0] = 1;
    for(i = 1;i<numsSize;i++)
        res[i] = res[i-1]*nums[i-1];

    //now, we can focus on the right side
    int rightCount = 1;
    for(i = numsSize-1;i>=0;i--){
        res[i] = res[i]*rightCount;
        rightCount = rightCount * nums[i];
    }

    *returnSize = numsSize;    
    return res;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值