码迷,mamicode.com
首页 > 其他好文 > 详细

[leedcode 238] Product of Array Except Self

时间:2015-08-08 21:17:51      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

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;
    }
}

 

[leedcode 238] Product of Array Except Self

标签:

原文地址:http://www.cnblogs.com/qiaomu/p/4713806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!