法一:常规思路,把需要remove的元素去掉,再做累乘。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param A int整型一维数组
# @return int整型一维数组
#
class Solution:
def multiply(self , A: List[int]) -> List[int]:
res=[]
for i in A:
Acopy=A[:]#注意:如果写Acopy=A,下一步执行Acopy.remove(i)会把A里面的元素也remove了。
#tips:用pop根据索引值删除元素也行
Acopy.remove(i)
mul=1
for j in range(len(Acopy)):
mul=mul*Acopy[j]
res.append(mul)
return res
时间复杂度:O(n2),其中n为数组A的长度
法二:双向遍历。
搬运题解区不是江小白的图。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param A int整型一维数组
# @return int整型一维数组
#
class Solution:
def multiply(self , A: List[int]) -> List[int]:
B=[1]*len(A)#初始化
Bleft=1
for i in range(1,len(A)):
Bleft=Bleft*A[i-1]
B[i]=Bleft#此时的B是B数组左边的值
Bright=1
for j in range(len(A)-2,-1,-1):
Bright=Bright*A[j+1]
B[j]=B[j]*Bright#用B数组左边的值乘以右边的值就是结果
return B
时间复杂度:O(n),其中n为数组A的长度,遍历两次数组