Leetcode238. O(n)并且不能使用除法计算数组每个元素除了它本身的所有元素的积

Leetcode238. Product of Array Except Self

题目

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.)

解题分析

这道题,如果没有O(n)和不能使用除法这两个限制,最直接的想法就是先计算整个数组的元素的积,最后只需再除以每个对应的元素即可。然而题目要求我们不能使用除法,所以那就只能另辟蹊径了。
说起来这个算法还是挺巧妙的。我们来看看应该怎样考虑这个问题。由于要求每个元素对应的除了它本身的所有元素的积,所以我们不妨将这个问题分成两个子问题来看,即将所有在该元素左边位置的元素相乘,将右边位置的元素相乘,二者相乘的结果就是我每个元素对应的值。
想到了这一点,问题就稍微清晰了些。我们可以用两次循环,第一次循环计算每个元素对应的在它左边的元素的相乘的结果;第二次循环计算每个元素对应的在它右边的元素相乘的结果。注意每次循环要将上一次计算的结果进行迭代,这样问题就顺利解决啦。下面附上这个算法的源代码。

源代码

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int size = nums.size(), right = 1;
        vector<int> v(size);
        v[0] = 1;
        for (int i = 1; i < size; i++) {
            v[i] = v[i - 1] * nums[i - 1];
        }
        for (int i = size - 1; i >= 0; i--) {
            v[i] *= right;
            right *= nums[i];
        }
        return v;
    }
};

以上是我对这道问题的一些想法,有问题还请在评论区讨论留言~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值