51. 构建乘积数组
题目描述
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。不能使用除法。
思路
思路一:
两重循环,在遍历数组A的时候,A[i]赋值为1,计算B[i]。时间复杂度为
思路二:
时间复杂度为
可以把B[i]=A[0]A[1]....A[i-1]A[i+1]....A[n-1]。看成A[0]A[1].....A[i-1]和A[i+1].....A[n-2]A[n-1]两部分的乘积。
即通过A[i]项将B[i]分为两部分的乘积。效果相当于是个对角矩阵。
第一个for循环用来计算上图1范围的数,第二个for循环用来计算上图2范围的数。
代码实现
思路一:
-*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
length = len(A)
B = []
if(length == 0):
return B
for i in range(length):
temp = A[i]
A[i] = 1
Bi = 1
for j in A:
Bi *= j
B.append(Bi)
A[i] = temp
return B思路二:
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
length = len(A)
if(length == 0):
return []
import copy
B = copy.copy(A)
B[0] = 1
# 计算下三角连乘
for i in range(1,length):
B[i] = B[i-1] * A[i-1]
# 计算下三角连乘
temp = 1
for j in range(length-2,-1,-1):
temp *= A[j+1]
B[j] *= temp
return B
京公网安备 11010502036488号