[算法--前缀和] 除自身以外数组的乘积

我们接着继续来分享一道题目 -> 除自身以外数组的乘积

  这道题目的话题意很简单, 就是让你返回一个数组, 这个数组每个值是除了这个数之外其他所有值的乘积.
  实际上好像还有一个类似的题目, 题目的大概意思就是给你一个数组int nums[], 然后让你返回一个数组int ret[], 这个数组中的每个元素ret[i] = sum - nums[i].

1. 不能用所有数的乘积 / nums[i] 这个思路.

  我第一次做的时候, 就是想着我直接把nums中所有元素一口气全部乘起来, 然后我填ret返回数组的时候, ret[i] = sum / num[i] 不就完了?

  事实证明, 我忘掉了nums[i]的值有可能是0. 如果nums中存在一个0, 那么sum = 0, 而nums中等于0的那个值对应的ret数组的元素却不是0!

2. 思路是: 前缀积 * 后缀积

  然后我想了一个新的思路, 我开一个n + 1大小的数组, 这个数组0是1, 1代表nums[0]之前所有元素的乘积, 2代表nums[1]之气那所有元素的乘积. 我再开一个数组, 这个数组0代表某个数之后所有数的乘积.

在这里插入图片描述

3. 出来自身意外数组的乘积 = 前缀积 * 后缀积

这个的话整体思路就相当明确了, 看下面图:
在这里插入图片描述

参考代码是:

class Solution {
   
    public:
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值