九章算法面试题40 不用除法求积

时间:2015-05-12 15:41:36   收藏:0   阅读:140

九章算法官网-原文网址

http://www.jiuzhang.com/problem/40/


题目

给定一个数组A[1..n],求数组B[1..n],使得B[i] = A[1] * A[2] .. * A[i-1] * A[i+1] .. * A[n]。要求不要使用除法,且在O(n)的时间内完成,使用O(1)的额外空间(不包含B数组所占空间)。


解答

计算前缀乘积Prefix[i] = A[1] * A[2] .. A[i],计算后缀乘积Suffix[i] = A[i] * A[i+1] .. A[n],易知,B[i] = Prefix[i - 1] * Suffix[i + 1]。实际上无需实际构造出Prefix和Suffix数组,利用B数组从左到右遍历一次得到Prefix[i],然后从右到左遍历一次,计算出所要求的B数组。


面试官角度

这种从前到后遍历和从后到前再遍历一次的方法(Foward-Backward-Traverse)在很多题目中都有借鉴。如九章算法面试题31 子数组的最大差。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!