题目来自网络,据说是腾讯2012年的面试题
问题描述:两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];要求:1.不准用除法运算2.除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)3.满足时间复杂度O(n),空间复杂度O(1)
分析:
a0 * * * *
* a1 * * *
* * a2 * *
* * * a3 *
* * * * a4
如上图所示,首先,我们可以计算下三角(b的一个因子)
b0 = 1;
b1 = a0;
b2 = b1* a2;
....
得到(b0,b1,b2,...,bn-1)
然后计算上三角时,可以得到
bn-1 已经得到
bn-2 = bn-2 * an-1;
bn-3 = bn-1 * an-2 (an -2 需要更新为an-1*an-2)
bn-4 = bn-2 * an-3 (an -3 需要更新为an-2*an-3)
...
b0 = b0 * a1 (a1需要更新为a1*a2)
这样我们就可以得到结果了。