剑指 构建乘积数组
构建乘积数组
http://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46
对于每一个B[i]值都分为左右两段的乘积,分别循环得到他们的结果。 O(n^2)
class Solution:
def multiply(self, A):
# write code here
if len(A)==1:
return -1
length=len(A)
B=[0 for _ in range(length) ]
def multi_result(start,end):
result=1
if start>=length:
return 1
for i in range(start,end):
result*=A[i]
return result
for i in range(length):
front=multi_result(0, i)
later=multi_result(i+1,length)
B[i]=front*later
return B分析,将B[i]的结果分为左右,发现左右分别与其上一个结果有关,所以每次不用重复遍历,只需乘上当前的数值就行,所以从下三角到上三角遍历两次,最终得到结果。
# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
if len(A)==0:
return -1
B=[1 for _ in range(len(A))]
temp=[1 for _ in range(len(A))]
temp_=[1 for _ in range(len(A))]
for i in range(1,len(A)):
temp[i]=temp[i-1]*A[i-1]
B[i]*=temp[i]
for i in range(len(A)-2,-1,-1):
temp_[i]=temp_[i+1]*A[i+1]
B[i]*=temp_[i]
return B
查看9道真题和解析