构建乘积数组

题目描述

给定一个数组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]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)
对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。
难度:简单

我的回答

# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
if len(A)<2:return
B = [1]*len(A)
for i in range(len(A)):
m = A[i]
for k in range(len(A)):
if k!=i:
B[k]=B[k]*m
return B

我的想法是,B数组中每个B[i]相当于 将A数组中的A[i]镂空然后A数组中其他数字相乘。

但是这样时间复杂度太大,为O(n^2)。

牛客官方给出的题解时间复杂度低,只有O(N)。

牛客官方题解

# -*- coding:utf-8 -*-
class Solution:
def multiply(self, A):
# write code here
if len(A)<2:return
B = [1]*len(A)
for i in range(1,len(A)):
B[i] = B[i-1]*A[i-1]
temp=1
for j in range(len(A)-2,-1,-1):
temp *= A[j+1]
B[j] *= temp
return B

最新文章

  1. Linux中MySQL的基本操作
  2. 智能车学习(二十三)&mdash;&mdash;浅谈心得体会
  3. jQuery源代码学习之六——jQuery数据缓存Data
  4. SqlDataReader的使用
  5. hdu3613 扩展KMP
  6. ueditor使用总结——前端篇.md
  7. 【原创】CQ数据库损坏修复
  8. .net source code
  9. python的__init__几种方法总结
  10. Redhat Linux 自动修改密码
  11. 如何高效撤销Git管理的文件在各种状态下的更改
  12. Matlab 2017b遇到绘图低级错误
  13. Visual Studio 2019 Serial Keys
  14. 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备
  15. Yarn 的日志聚集功能配置使用
  16. Python之路(第二十一篇) re模块
  17. 1. EM算法-数学基础
  18. JavaScript------自定义string.replaceAll()方法
  19. shell编程===执行shell脚本的四种方法
  20. JavaScript中字符串截取函数slice()、substring()、substr()

热门文章

  1. 如何删除一台OSD主机
  2. if __name__ == &quot;__main__&quot;的疑惑
  3. RTSP服务端开发概述
  4. 单核cpu多线程有必要吗?
  5. guitar pro系列教程(二十三):如何使用Guitar Pro制作扫弦
  6. Vegas干货分享,如何制作霓虹灯效果
  7. springboot打jar包将引用的第三方包、配置文件(.properties、.xml)、静态资源打在包外
  8. 测试中:ANR是什么
  9. Kubernetes K8S之固定节点nodeName和nodeSelector调度详解
  10. C#:终于有人把 ValueTask、IValueTaskSource、ManualResetValueTaskSourceCore 说清楚了!