leetcode 238.除自身以外数组的乘积

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

示例:

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

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

进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

 

第一次代码

int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
            if(j!=i)
                value[i]*=nums[j];
        }
    }
return value;

   很显然运行超时,时间复杂度n平方

 

优化后的代码

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

算法思路

两次遍历数组,第一次求出数组中每个数后边所有数的乘积;

第二次从后向前遍历数组,在求出每个数前边数字的乘积。

 

猜你喜欢

转载自blog.csdn.net/qq_38290604/article/details/88169835