283.除自身以外数组的乘积(前缀积、C解法)

题目描述:

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]

示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

前缀积解法:

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

    ans[0]=1;
    for(int i=1;i<numsSize;i++){
        ans[i]=ans[i-1]*nums[i-1];
    }
    int r=1;
    for(int i=numsSize-1;i>=0;i--){
        ans[i]*=r;
        r*=nums[i];
    }
    return ans;
}

分析:

        该思路和前缀和有点类似,即计算下一个元素的积时有很大一部分计算是与计算上一个元素的积重复的,用前缀积数组存储计算值,在该值的基础上进行下一个计算,减少了重复运算,达到降低时间复杂度的效果。

        每一个元素除自身以外数组的积可以分解为前缀积乘以后缀积,后缀积求法与前缀积类似,只是遍历的顺序相反。可以用两个数组,两个for循环分别求前缀积、后缀积,再用一个数组,一个for循环计算题解,这种解法思路更直接,但开了三个数组空间复杂度高。本解法选择用一个for循环将题解数组当作前缀积数组,再用一个for循环同时计算后缀积和题解,这样只开了一个数组。

        需注意,函数中定义的数组(int ans[returnSize];)是局部变量,离开函数后会自动释放,不能用return传出去,必须用malloc定义数组。

相关推荐

  1. 283.自身以外乘积前缀C解法

    2024-01-23 09:10:01       33 阅读
  2. 【Leetcode】238.自身以外乘积

    2024-01-23 09:10:01       50 阅读
  3. 【力扣】238. 自身以外乘积

    2024-01-23 09:10:01       14 阅读
  4. 238. 自身以外乘积

    2024-01-23 09:10:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 09:10:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 09:10:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 09:10:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 09:10:01       20 阅读

热门阅读

  1. MongoDB详解(1)

    2024-01-23 09:10:01       32 阅读
  2. etcd备份

    2024-01-23 09:10:01       27 阅读
  3. VUE: 处理 PDF文件

    2024-01-23 09:10:01       62 阅读
  4. Hive 拉链表详解及实例

    2024-01-23 09:10:01       29 阅读
  5. 【力扣每日一题】力扣670最大交换

    2024-01-23 09:10:01       34 阅读
  6. 数据结构(更新至链表)

    2024-01-23 09:10:01       30 阅读
  7. [EFI]ThinkBook 13s G3电脑 Hackintosh 黑苹果efi引导文件

    2024-01-23 09:10:01       28 阅读
  8. DLL注入技术

    2024-01-23 09:10:01       33 阅读
  9. 创建Servlet的三种方式

    2024-01-23 09:10:01       34 阅读
  10. 如何在前端优化中减少页面加载时间?

    2024-01-23 09:10:01       35 阅读
  11. CF1893C Freedom of Choice 题解

    2024-01-23 09:10:01       30 阅读