给定一个整数数组,比如3,5,7,9。您需要创建另一个数组,并将其填充,使第二个数组的第0个位置是第一个数组中除了该位置上的数字之外所有数字的乘积,即应为5x7x9(不包括3),第二个数组第1个位置上的数字将是3x7x9(不包括5)。
我最初想到的答案是使用两个for循环,这将导致时间复杂度为O(n2)。后来我想到了以下方法:
先将第一个数组中所有数字相乘(3x5x7x9),然后在填充第二个数组时,用这个乘积除以该位置上的数字。如果要填充第0个位置,则除以3,如果要填充第1个位置,则除以5,依此类推。这将把复杂度从O(n2)降至O(2n)。
但是,面试官说不允许使用除法。我除了将不同的可能乘积存储在某种数据结构中并在填充时使用之外,再也想不出其他办法了。最后当被问及答案时,他说他会维护两个前向和后向乘积数组。当被问及解决方案的空间复杂度问题时,他表示可以优化。
O(n)
,而解决方案添加了另一个O(n)
,总体仍然是O(n)
。 - davin