LeetCode_238_Product of Array Except Self

题目描述:给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例1:
输入: [1,2,3,4]
输出: [24,12,8,6]

说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
算法思想:分别当前数的前缀乘积和后缀乘积,如:当要计算第i个位置的乘积结果时,只需要扫描并计算i前面的所有数的乘积和i后面的所有数的乘积(前后各扫描一边即可完成乘积的计算)。

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int len=nums.size();
        vector<int> result(len,1);/*这里需要注意必须要声明vector的大小和初始值,否则会报空指针错误*/
        int prefix=1;
        for(int i=0;i<len;i++){
            result[i]=prefix;
            prefix=prefix*nums[i];
        }
        int surfix=1;
        for(int i=len-1;i>=0;i--){
            result[i]*=surfix;
            surfix*=nums[i];
        }
        return result;
    }
};

运行时间效果图
时间复杂度是O(n),空间复杂度是O(n)

猜你喜欢

转载自blog.csdn.net/all_about_WZY/article/details/88174409