知识点

前缀积

思路

设nums数组长度为n 由于题意不允许使用除法,所以我们可以分别维护从左往右的前缀积l[i]和从右往左的前缀积r[i]。 除了头部两个以及尾部两个(下标为0,1,n-1,n-2)以外,对其余i的答案则为

l[i-2]*r[i-2]

遍历一遍更新答案即可

代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型vector
     */
    vector<int> productExceptSelf(vector<int>& nums) {
        // write code here
        
        int l[10005];
        int r[10005];
        l[0]=nums[0];
        r[nums.size()-1]=nums[nums.size()-1];
        for(int i=1;i<nums.size();i++)
        {
           l[i]=l[i-1]*nums[i];
        }
        for(int i=nums.size()-2;i>=0;i--)
        {
            r[i]=r[i+1]*nums[i];
        }
        vector<int>ans;
        for(int i=0;i<nums.size();i++)
        {
            if(i==0||i==1)ans.push_back(r[i+2]);
           else if(i==nums.size()-1||i==nums.size()-2)ans.push_back(l[i-2]);
            else 
            {
                ans.push_back(l[i-2]*r[i+2]);
            }
        }
        return ans;

    }
};