238. Product of Array Except
Given an array
nums
of $n$ integers where $n>1$, return an arrayoutput
such thatoutput[i]
is equal to the product of all the elemetns ofnums
exceptnums[i]
题目说的是, 给一个array
, 要求返回另外一个数组. 要求是, 返回的数组里面的是原数组其他数的乘积.
比如说:[1, 2, 3, 4]
是输入, 那么输出是 [24, 12, 8, 6]
. 因为 $24 = 2 \times 3 \times 4$, $12 = 1 \times 3 \times 4$.
思路
要解这道题, 可以运用两个指针. 从前往后扫, 得出 $0$ 到 $i-1$ 的乘积. 从后往前扫, 得出 $i+1$ 到 最后一位的乘积. 然后将两次扫到的结果相乘.
这里的输入还是 [1, 2, 3, 4]
.
首先, 从前往后扫. 得出 f = [1, 1, 2, 6]
. 然后再从后往前扫, 得出 b =[24, 12, 4, 1]
. 然后将两个数组相乘, 就是题目要求的结果.
仔细看两次的扫描结果, 很容易发现, 当$i=2$的时候, f[2] = nums[0] * nums[1]
, b[2] = nums[3] * 1
. 他们相乘的结果刚好是 nums[0] * nums[1] * nums[3]
.
Code
1 | def productExceptSelf(nums): |
EOF