LeetCode 238. Product of Array Except Self(java)

1978 ワード

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].
考え方:各位置の値は自分の他のすべての数の積を除いているため、しかし要求時間の複雑さはO(n)、私たちの方法は前に進むしかなく、振り返ることができないことを証明しますが、一度歩くと所望の結果が得られません.そのため、私たちは2回歩く必要があります.まず前から後ろに1回歩いて、自分の前の数を除いた積を記録するたびに、後から前に1回歩いて、毎回自分の後ろの数を除いた積を乗じる必要があります.これによって最終的な所望の結果を得ることができます.配列しました.
    public int[] productExceptSelf(int[] nums) {
        if (nums == null || nums.length <= 1) return nums;
        int[] helper = new int[nums.length];
        helper[0] = 1;
        for (int i = 1; i < nums.length; i++) {
            helper[i] = helper[i - 1] * nums[i - 1];
        }
        int right = 1;
        for (int i = nums.length - 1; i >= 0; i--) {
            helper[i] = helper[i] * right;
            right = right * nums[i];
        }
        return helper;
    }

Folllow up、他の方法があるかどうか考えてみましょう.もし空間の複雑さがO(1)であれば、どう書きますか.
私の考え:まず1回遍歴して、総積を求めて、それから配列を遍歴して、各indexの上で総積をこの位置の値で除算すればいいです.