[leedcode 238] Product of Array Except Self

Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[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.)

public class Solution {
    public int[] productExceptSelf(int[] nums) {
     /*   则维护当前元素左边所有元素的乘积以及右边所有元素的乘积, 相乘得到 product of array except self !


    Because we cannot use division, so assume we have two integer arrays with the same length of nums, int[] leftProd = new int[nums.length]; int[] rightProd = new int[nums.length], we store the product of all the left elements in leftProd and the product of all the right elements in rightProd, then the product of leftProd[i] and rightProd[i] will be the value we want to put into the result. take the example of num[] = {2, 4, 3, 6}, thenleftProd will be {1, 2, 8, 24} , and rightProd will be {72, 18, 6, 1}.
    
    
    维持两个数组, left[] and right[]. 分别记录 第i个元素 左边相乘的积left[i] and  右边相乘的积right[i]. 那么结果res[i]即为left[i]*right[i].     follow up 要求O(1)空间. 利用返回的结果数组, 这样可以不需要额外的空间.


    pos主要保存从右向左的乘积,比如第i项,pos代表的是i+1到len-1*/
        int[] res=new int[nums.length];
        res[0]=1;
        for(int i=1;i<nums.length;i++){
            res[i]=res[i-1]*nums[i-1];
        }
        int pos=1;
        for(int i=nums.length-1;i>=0;i--){
            res[i]=pos*res[i];
            pos*=nums[i];
        }
        return res;
    }
}

 

posted @ 2015-08-08 20:13  ~每天进步一点点~  阅读(132)  评论(0编辑  收藏  举报