现在的位置: 首页 > 综合 > 正文

子数组的最大乘积

2017年09月10日 ⁄ 综合 ⁄ 共 359字 ⁄ 字号 评论关闭

子数组的最大乘积  

定一个长度为N的整数数组,只允许使用乘法,不能使用除法,计算任意(N-1)个数的组合乘积中最大的一组,并写出算法的时间复杂度。


思路一:我们把所有可能的(N-1)个数的组合找出来,分别计算它们的乘积,并比较大小。时间复杂度为O(N*N).
思路二:通过空间换时间来降低时间复杂度。设array[]为初始数组,s[i]表示数组前i个元素的乘积,其中1<=i<=N,s[0]=1;
t[i]表示数组后(N-i)个元素的乘积,其中1<=i<=N,t[N+1]=1。
设p[i]为数组除第i个元素外,其他N-1个元素的乘积。
p[i]=s[i-1]*t[i+1]
由于只需要从头到尾和从尾到头扫描数组两次即可得到s[]和t[],进而线性时间就可以得到p[],所以很容易就可以得到p[]的最大值,总的时间复杂度为O(N)

抱歉!评论已关闭.