子数组的最大乘积
定一个长度为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)