问题:
Given an array arr[] of n integers, construct a Product Array prod[] (of the same size) such that prod[i] is equal to the product of all the elements of arr[] except arr[i].
解答:
遍历数组循环跳过当前元素,需要两层循环, 时间复杂度O(n^2),空间复杂度O(n)
def arrayOfProducts(array):
products = [1 for _ in range(len(array))]
for i in range(len(array)):
runningProduct = 1
for j in range(len(array)):
if i != j:
runningProduct = runningProduct * array[j]
products[i] = runningProduct
return products
使用两个临时数组,一个数组存放从左边到i个元素的积, 另外一个从右边开始到第i个元素的积。然后两个结果相乘放到结果集。
def arrayOfProducts(array):
# Write your code here.
products = [1 for _ in range(len(array))]
leftProducts = [1 for _ in range(len(array))]
rightProducts = [1 for _ in range(len(array))]
leftRunningProduct = 1
for i in range(len(array)):
leftProducts[i] = leftRunningProduct
leftRunningProduct *= array[i]
rightRunningProduct = 1
for i in reversed(range(len(array))):
rightProducts[i] = rightRunningProduct
rightRunningProduct *= array[i]
for i in range(len(array)):
products[i] = leftProducts[i] * rightProducts[i]
return products
使用一个临时数组,直接放到结果集中。
def arrayOfProducts(array):
# Write your reversecode here.
products = [1 for _ in range(len(array))]
leftRunningProduct = 1
for i in range(len(array)):
products[i] = leftRunningProduct
leftRunningProduct *= array[i]
rightRunningProduct = 1
for i in reversed(range(len(array))):
products[i] *= rightRunningProduct
rightRunningProduct *= array[i]
return products
参考及引用:
https://www.algoexpert.io/questions/array-of-products
图片 白頭鶇,台灣特有種 from饒瑞泓


Comments are closed.