238. Product of Array Except Self

一、题目

  1、审题

  

  2、分析

    给出一个整形数组,用另一个数组存储所给数组的除去当前下标元素外的所有元素的乘积。尝试用 O(n) 时间复杂度,常数额外空间。

 

二、解答

  1、思路

    方法一、

      ① 新建数组 result,使用循环,为 result 赋值, result[i] = nums[0] * nums[1] * ... * nums[i-1] 。

      ② 采用新的循环,从后向前遍历nums,用初值为 1 的变量 right 记录从nums中遍历的元素的乘积。

      ③ 将 right 每次更新的值乘入 result [i];

    public int[] productExceptSelf(int[] nums) {
        int len = nums.length;
        int[] result = new int[len];
        result[0] = 1;
        for (int i = 1; i < len; i++) // result[i] = nums[0] * nums[1] * ... * nums[i-1] 
            result[i] = result[i-1] * nums[i-1];
        
        int right = 1;
        for (int i = len - 1; i >= 0; i--) {
            result[i] *= right; 
            right *= nums[i];
        }
        
        return result;
    }

 

posted @ 2018-11-10 22:26  skillking2  阅读(80)  评论(0编辑  收藏  举报