【剑指offer】51.构建乘积数组
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]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)
对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。
解法一:
可以发现对于B[i],就是把A中数组元素全部乘一次,然后除以A[i],但是题目中不能用除法,所以可以每次先将A[i]的值赋为1,然后再去相乘;
这样去解用了for的嵌套,时间复杂度为O(n^2);其实可以发现我们每次都要去将这么多元素的值去乘一遍,每次只有一个元素不一样,这样太浪费了,所以有了下面这样的解法。
解法二:
经过上述分析后可以得到下图,其实就是将求B中第i个元素的值,那就是让A中的第i个元素值为1
算每行的Bi就是将这行所有的元素乘一下就可以了,可以发现在左下角,在算B[i的时候,其实是要用到B[i-1]的,它们的关系是B[i]=B[i-1]*A[i-1];再看右上角,从下往上,假设值为temp吧,那temp[i]=temp[i+1] *A[i+1];然后再把左边和右边相乘就可以了。
这样利用到了先前的信息,减少了浪费,时间复杂度为O(n);
__EOF__

本文作者:Curryxin
本文链接:https://www.cnblogs.com/Curryxin/p/14746453.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Curryxin/p/14746453.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了