LeetCode.238 Product of Array Except Self

来源:互联网 发布:淘宝网男徒步凉鞋 编辑:程序博客网 时间:2024/05/29 13:07

题目:

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.)

分析:

class Solution {    public int[] productExceptSelf(int[] nums) {        //给定数组,返回的是全数组所有元素之积(但是不包括当前该元素),不能使用除法。        //注意:1.积的长度可能会越界。2.以及长度太长,超时        //思路:传统分两部分(前和后)容易超时,需要跳过相同的数据,使用HashMap,相同的数据,直接赋值相同。        int [] res=new int [nums.length];        HashMap<Integer,Integer> hm=new HashMap<Integer,Integer>();                for(int i=0;i<nums.length;i++){            //跳过相同的            if(hm.containsKey(nums[i])){                //存在相同项                res[i]=hm.get(nums[i]);            }else{                //不存在,将结果压入map,作为记录                int temp=1;                for(int head=0;head<i;head++){                    temp*=nums[head];                }                for(int tail=i+1;tail<nums.length;tail++){                    temp*=nums[tail];                }                res[i]=temp;                 hm.put(nums[i],temp);            }                 }        return res;    }}

分析2(推荐):

class Solution {    public int[] productExceptSelf(int[] nums) {        //参考答案解法:利用一个数组存入该数的前n-1个积。        int [] res=new int[nums.length];        int temp=1;        res[0]=1;        for(int i=1;i<nums.length;i++){            //前n-1个数对应的积和            res[i]=res[i-1]*nums[i-1];        }                int right=1;        for(int i=nums.length-1;i>=0;i--){            //从最末尾开始,末尾数的非它积为res[i]*1=res[i]            //倒数第2个数:它前n-1积和*倒数第一个数即它的非它积            //以此类推            res[i]*=right;            right*=nums[i];        }        return res;            }}