opencv计算两数组的乘积_#剑指Offer#12. 构建乘积数组

题目描述:给定一个数组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[i]是A数组所有元素的乘积,但是没有A[i]项,如果没有不能使用除法这一限制,我们可以直接将A数组的所有元素相乘,得到一个乘积,记为res,则使用公式B[i] = res/A[i]即可得到B这个乘积数组。

现在有不能使用除法的限制,只能使用其他办法,当然,一个最直观的办法是每次计算B[i]时,都计算A数组中n-1个数字的乘积,显然这需要O(n^2)的时间复杂度。

仔细分析可以发现,这种暴力解法有很多重复的计算,我们可以通过一个简单的改变来避免这些重复计算。具体如下:

我们可以把B[i]=A[0]*A[1]*A[2]*···*A[i-1]*A[i+1]*···*A[n-1]看成是两部分的乘积,第一部分是i之前的所有项,记为C[i],即C[i]=A[0]*A[1]*A[2]*···*A[i-1],第二部分是i之后的所有项,记为D[i],即D[i]=A[i+1]*···*A[n-1]。经过这样的分隔后,数组B就相当于可以用如下的矩阵来构建,B[i]为矩阵中第i行所有元素的乘积。

ce6362ae487851e95a540f31c99fea99.png

由此,我们不难得出相应的规律:首先B[i]=C[i]*D[i],而C[i]可以通过自上而下的顺序进行计算,即C[0]=1,C[i]=C[i-1]*A[i-1],同理,D[i]可以通过自下而上的顺序进行计算,即D[len-1]=1,D[i]=D[i+1]*A[i+1]

代码如下所示,第一个for循环从上而下相当于计算C[i],第二个for循环自下而上相当于在C[i]的基础上乘以D[i]。显然时间复杂度为O(n)。

public int[] multiply(int[] A) {/*思路:分成两部分的乘积,第一部分可以自上而下,第二部分自下而上*/if(A==null||A.length<1)return A;int len=A.length;int[] B=new int[len]; B[0]=1;for(int i=1;i<len;i++)   //第一部分可以自上而下B[i]=B[i-1]*A[i-1];    //如何要达到上图排序的效果就需要有这样的通项公式int temp=1;  //temp用来保存第二部分for(int i=len-2;i>=0;i--){   //第二部分可以自下而上temp=temp*A[i+1];B[i]=B[i]*temp;}return B;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python引用numpy出错_使用numpy时出错

我尝试使用pandas python进行excel操作。在每当我尝试使用pandas库时&#xff0c;它都会给我错误的提示&#xff1a;numpy没有安装。在现在&#xff0c;当我尝试安装pip install numpy和pip安装pandas时&#xff0c;它说需求已经满足了。在但是当我尝试做一个简单的numpy教程时…

中国移动:面向全业务运营的安全管理平台

在2008年的一个电信运营支撑系统论坛上&#xff0c;来自中国移动的集团网络部的安全副处长周智先生做了一个题为《面向全业务运营的安全运行管理系统定位及建设思路》的报告。 在这个报告中&#xff0c;周处首先分析了全业务运营环境下的安全挑战&#xff0c;然后提出了在全业务…

记一次 .NET 某桌面奇侠游戏 非托管内存泄漏分析

一&#xff1a;背景 1. 讲故事说实话&#xff0c;这篇dump我本来是不准备上一篇文章来解读的&#xff0c;但它有两点深深的感动了我。无数次的听说用 Unity 可做游戏开发&#xff0c;但百闻不如一见。游戏中有很多金庸武侠小说才有的名字&#xff0c;太赏心悦目了。000000df315…

成年人的数学公式

1 成年人的数学公式2 唯一对我说过“别走好吗”的人3 主人发起疯来有多可怕4 别人家的狗看到主人有危险▼你家的……▼5 蜘蛛捕食瞬间6 蜡烛重燃&#xff08;冒的白烟是固态小颗粒的石蜡蒸汽&#xff0c;可燃&#xff09;你点的每个赞&#xff0c;我都认真当成了喜欢

ubuntu运行python ide_在Ubuntu-16.04中安装Python可视化IDE——Spyder

Spyder是Python(x,y)的作者为它开发的一个简单的集成开发环境。和其他的Python开发环境相比&#xff0c;它最大的优点就是模仿MATLAB的“工作空间”的功能&#xff0c;可以很方便地观察和修改数组的值。Spyder的界面由许多窗格构成&#xff0c;用户可以根据自己的喜好调整它们的…

Linux查看系统信息的一些命令及查看已安装软件包的命令(转)

系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所…

日历签到 java_我的Android案例―签到日历

public class MainActivity extends Activity {//Log标签private static final String TAG "SIGN";//声明对象private Button sign;private TextView show;private GridView myDate;//获得本地时间Time nowTime new Time();//1个月内的天数private int dayMaxNum;p…

phpMailer 配置 企业邮局 163

phpMailer的两种配置&#xff0c;记录一下&#xff0c;差别在一个要写完整邮件地址&#xff0c;一个只要填前面的部分。一、自己的企业邮局发信$mail new PHPMailer();//$body file_get_contents("mail/".$date.".html"); //$bo…

Linux运维实战之DNS的高级配置(转发器、视图等)

上次博文我们具体配置了一台DNS服务器并实现了主辅之间的区域传送&#xff0c;本次博文我们来看看DNS的一些高级配置。 在进行DNS的高级配置之前&#xff0c;必须要理解DNS的原理&#xff08;参见http://sweetpotato.blog.51cto.com/533893/1596973&#xff09; 并且对DNS的基础…

POJ1269 Intersecting Lines 计算几何 C语言

题目&#xff1a;http://poj.org/problem?id1269 题目大意&#xff1a;给出四个点确定两条直线。如果是一条线输出“LINE”&#xff0c;如果平行输出“NONE”&#xff0c; 如果有交点输出交点坐标。 思路&#xff1a;注意是直线&#xff0c;不是线段啊。 用两点式推出两条直线…

史上最烧脑的学习方法,看完瞬间涨姿势!

▲ 点击查看 在美国&#xff0c;有一个天才儿童计划&#xff0c;选拔一批“天才”儿童进入天才班。这个计划是为了保证每个人接受平等教育机会的同时&#xff0c;也为精英成长提供合适的土壤。美国所谓的天才和精英是怎样的标准呢&#xff1f;进入天才班的儿童首先要通过一个叫…

WPF轮播图实现方式(二)

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览02—代码如下一、EmphasizerCarousel.cs 代码如下using System; using System.Collections.Generic; using System.Collections.Obj…

java开闭原则_什么是开闭原则?如何实现开闭原则

2015-04-13 06:30:01阅读( 137 )开闭原则的解释就是&#xff1a;软件实体应当对扩展开放&#xff0c;对修改关闭&#xff0c;也就是&#xff1a;软件系统中包含的各种组件&#xff0c;例如模块(Modules)、类(Classes)以及功能(Functions)等等&#xff0c;应该在不修改现有代码的…

实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?...

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧&#xff0c;一开始就弄些重量级的&#xff0c;什么人工智能&#xff0c;机器学习的算法&#xff0c;还要有大量的数学以及优化的知识&#xff0c;小白们估计会很郁闷&#xff0c;当然我也不一定能做出来对…

QQREADERB9B632B5D3670680

QQREADERB9B632B5D3670680

ListBox类似组件,鼠标右键点击事件得到选中Item

允许多选的ListBox需要加判断.可以参考被注释掉的代码.不再赘述. 1 //OnMouseUp: 2 3 var 4 APoint: TPoint; 5 Index: Integer; 6 begin 7 if ButtonmbRight then 8 begin 9 APoint.x : X;10 APoint.y : Y;11 Index : ListBox.ItemAtPos(APoint, True);1…

Bootstrap在线编辑器简单分享

Bootstrap 已经使响应式网站开发变得简单很多。 但是如果你不必手动写全部代码&#xff0c;事情会如何呢&#xff1f; 如果你可以自由地选择你想要使用的Bootstrap 组件、并可以把它们拖拽到画布中&#xff0c;事情会如何呢&#xff1f;这就是Bootstrap 编辑器的用武之地。 在这…

twitter mysql_twitter-mysql改进点

目前最新的twitter-mysql版本基于mysql5.5.22&#xff0c;以下总结了一些比较明显的改进点&#xff0c;大部分已经亲自证实&#xff0c;其他一些诸如修复的比较次要的问题(例如编译问题)这里暂不列出&#xff0c;可以详细参阅https://github.com/twitter/mysql/wiki/Change-His…

爱因斯坦去世不到7个小时,大脑就被人偷走!还被切成240块,供变态医生把玩了几十年.........

全世界只有3.14 % 的人关注了爆炸吧知识你的智商说不定比爱因斯坦还高俗话说&#xff0c;人怕出名猪怕壮。作为世界闻名的大科学家&#xff0c;世人却更愿意把爱因斯坦的成就归功于“天赋异禀的脑子”&#xff0c;顺带着爱因斯坦其他的“身体零件”也都成了大家好奇的对象。爱因…

字符串池化,减少了三分之一的内存占用

字符串池化&#xff0c;减少重复实例&#xff0c;内存降低&#xff0c;一切就是这样的轻松愉快。开篇摘要 本文通过一个简单的业务场景&#xff0c;来描述如何通过字符串池化来减少内存中的重复字符串实例&#xff0c;从而减少内存的占用。在业务中&#xff0c;我们假设如下&am…