leetcode 238: Product of Array Except Self

来源:互联网 发布:网络共享文件夹打不开 编辑:程序博客网 时间:2024/06/10 01:04

Learn the idea from https://leetcode.com/discuss/49667/o-n-time-and-o-1-space-c-solution-with-explanation.

O(n) time and O(n) space method:

Take [1,2,3,4] as an example, fromBegin will be [1,1*1,1*1*2,1*1*2*3], and fromEnd will be [1,1*4,1*4*3,1*4*3*2]. So the result can be derived from multiplying numbers from the two vectors.

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

Here, I can reduce the space complexity by using only two variables.

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


0 0
原创粉丝点击