剑指 构建乘积数组

构建乘积数组

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
全部评论

相关推荐

昨天 10:39
门头沟学院 Java
点赞 评论 收藏
分享
程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务