剑指offer二刷——数组专题——构建乘积数组
2024-10-11 21:10:25
构建乘积数组
题目描述
给定一个数组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
最新文章
- Linux中MySQL的基本操作
- 智能车学习(二十三)&mdash;&mdash;浅谈心得体会
- jQuery源代码学习之六——jQuery数据缓存Data
- SqlDataReader的使用
- hdu3613 扩展KMP
- ueditor使用总结——前端篇.md
- 【原创】CQ数据库损坏修复
- .net source code
- python的__init__几种方法总结
- Redhat Linux 自动修改密码
- 如何高效撤销Git管理的文件在各种状态下的更改
- Matlab 2017b遇到绘图低级错误
- Visual Studio 2019 Serial Keys
- 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备
- Yarn 的日志聚集功能配置使用
- Python之路(第二十一篇) re模块
- 1. EM算法-数学基础
- JavaScript------自定义string.replaceAll()方法
- shell编程===执行shell脚本的四种方法
- JavaScript中字符串截取函数slice()、substring()、substr()
热门文章
- 如何删除一台OSD主机
- if __name__ == ";__main__";的疑惑
- RTSP服务端开发概述
- 单核cpu多线程有必要吗?
- guitar pro系列教程(二十三):如何使用Guitar Pro制作扫弦
- Vegas干货分享,如何制作霓虹灯效果
- springboot打jar包将引用的第三方包、配置文件(.properties、.xml)、静态资源打在包外
- 测试中:ANR是什么
- Kubernetes K8S之固定节点nodeName和nodeSelector调度详解
- C#:终于有人把 ValueTask、IValueTaskSource、ManualResetValueTaskSourceCore 说清楚了!