4. Array products

This problem was asked by Uber.

Given an array of integers, return a new array such that each element at index i of the new array is the product of all the numbers in the original array except the one at i.

For example, if our input was [1, 2, 3, 4, 5], the expected output would be [120, 60, 40, 30, 24]. If our input was [3, 2, 1], the expected output would be [2, 3, 6].

Follow-up: what if you can't use division?

假設ary長度為n, 且被拆成左右兩部分

def products(ary):
  result = []
  for i in range(len(ary)): # n
    ary1 = ary[0:i] # O(1)
    ary2 = ary[i+1:len(ary)] # O(1)
    p1 = p2 = 1
    for j in range(len(ary1)): # x
      p1 *= ary1[j] # O(1)
    for j in range(len(ary2)): # y
      p2 *= ary2[j] # O(1)
    result.append(p1*p2)
  return result

T = n *[ O(1) + O(1) + (O(x) + O(y)) ] # x+ y = n - 1

Last updated

Was this helpful?