[Leetcode] Product of Array Except Self

来源:互联网 发布:visual basic编程实例 编辑:程序博客网 时间:2024/06/07 11:46

Given an array of n integers where n > 1, nums, return an arrayoutput such thatoutput[i] is equal to the product of all the elements ofnums exceptnums[i].

Solve it without division and in O(n).

For example, given [1,2,3,4], return [24,12,8,6].

Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)

class Solution {public:    /*algorithm        1) for each element A[i], compute two numbers            f[i]: equal to product A[0...i-1]           b[i]: equal to product A[i+1...n)        2) so for each A[i],its product is f[i]*b[i]        eg:[1,2,3,4]        f  [1, 1, 2,6]        b  [24,12,4,1]        r  [24,12,8,6]        time O(n)  space O(n)        */    vector<int> productExceptSelf(vector<int>& nums) {            vector<int>result;            int n = nums.size();            if(n < 1)return result;            vector<int>f(n,1),b(n,1);            for(int i = 1;i < n;i++){                f[i] = f[i-1]*nums[i-1];            }            for(int i = n - 2;i >= 0;i--){                b[i] = b[i+1]*nums[i+1];            }                        for(int i = 0;i < n;i++){                result.push_back(f[i]*b[i]);            }            return result;    }};    /*algorithm2: optimize the space about f and b      space O(1)    */      vector<int> productExceptSelf(vector<int>& nums) {            int n = nums.size();            vector<int>result(n);            result[0] = 1;            for(int i = 1;i < n;i++){                result[i] = result[i-1]*nums[i-1];            }            int right = 1;            for(int i = n - 2;i >= 0;i--){                right = right*nums[i+1];                result[i] = right*result[i];            }            return result;    }




0 0
原创粉丝点击