力扣面试150题 除自身以外数组的乘积

发布时间:2024年01月13日

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

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

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

解法:一道利用前缀乘和后缀乘思想的题目,先预处理出每个数 左边数的乘积和右边数的乘积,然后遍历每个数,把每个数左边的乘积和右边的乘积相乘即可。

class Solution {
public:
    int l[100010],r[100010];//记录坐标i 的前缀乘和后缀乘
    vector<int> productExceptSelf(vector<int>& nums) {
        vector<int>res;
        nums.insert(nums.begin(),1);
        l[0]=1;
        r[nums.size()]=1;
        for(int i=1;i<nums.size();i++)
        {
            l[i]=l[i-1]*nums[i];
            cout<<l[i]<<" ";
        }
        cout<<endl;
        for(int i=nums.size()-1;i>=0;i--)
        {
            r[i]=r[i+1]*nums[i];
          
        }
        for(int i=1;i<nums.size();i++)
        {
            res.push_back(l[i-1]*r[i+1]);
        }
        return res;
    }
};

文章来源:https://blog.csdn.net/weixin_63022020/article/details/135563962
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。