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
  • 相关阅读:
    二分查找:思路很简单,细节是魔鬼
    今天遇到了 X-Y PROBLEM
    《工匠精神》读书笔记
    养成好的职业习惯
    php xdebug 调试
    Dockerfile的常见命令
    docker制作镜像
    脱坑笔记
    Java中代理
    2、遇到多个构造器参数的时候要考虑使用构建器
  • 原文地址:https://www.cnblogs.com/yucen/p/9912010.html
Copyright © 2011-2022 走看看