zoukankan      html  css  js  c++  java
  • 【剑指Offer】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]。不能使用除法。

    时间限制:1秒;空间限制:32768K;本题知识点:数组

    解题思路

    思路一

    两次循环实现除自身外的累乘,时间复杂度较大。

    Python代码:

    # -*- coding:utf-8 -*-
    class Solution:
        def multiply(self, A):
            # write code here
            result = []
            for i in range(len(A)):
                L = 1 #中间变量
                for j in range(len(A)):
                    if i != j:
                        L *= A[j]
                result.append(L)
            return result

    思路二

    按照下图,矩阵被分为上三角矩阵和下三角矩阵,分别求得连乘值,最后上三角连乘值乘以对应下三角连乘值即可。

    Python代码:

    # -*- coding:utf-8 -*-
    class Solution:
        def multiply(self, A):
            # write code here
            L1 = [1]  #下三角连乘值,长度n,初始1
            L2 = [1]  #上三角连乘值,长度n,倒序,初始1
            L = []    #结果数组,长度n
            for i in range(1,len(A)):
                L1.append(L1[i-1]*A[i-1])
                L2.append(L2[i-1]*A[-i])
            for i in range(len(A)):
                L.append(L1[i]*L2[-(i+1)])
            return L
  • 相关阅读:
    redis 数据类型详解 以及 redis适用场景场合
    angular.js记录
    Python chr() 函数
    Python frozenset() 函数
    Python 字典 dict() 函数
    Python set() 函数
    Python tuple 函数
    Python eval() 函数
    Python repr() 函数
    Python str() 函数
  • 原文地址:https://www.cnblogs.com/yucen/p/9912010.html
Copyright © 2011-2022 走看看