题目描述:
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Solve it without division and in O(n).
For example, given [1,2,3,4], return [24,12,8,6].
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
题目大意:
给定长度为n的整数数组nums,其中n > 1,返回输出数组output,满足output[i]等于除nums[i]之外其余各数的乘积。
不使用除法,在O(n)时间复杂度内完成此题目。
例如,给定 [1,2,3,4],返回 [24,12,8,6]。
进一步思考:
你可以在常数空间复杂度内完成题目吗?(注意:输出数组不算在空间复杂度分析中)
解题思路:
首先想到的思路是计算全部数字的乘积,然后分别除以num数组中的每一个数(需要排除数字0)。然而,题目要求不能使用除法。
下面的解法非常巧妙,参考LeetCode Dicuss
链接地址:https://leetcode.com/discuss/46104/simple-java-solution-in-o-n-without-extra-space
由于output[i] = (x0 * x1 * ... * xi-1) * (xi+1 * .... * xn-1)
因此执行两趟循环:
第一趟正向遍历数组,计算x0 ~ xi-1的乘积
第二趟反向遍历数组,计算xi+1 ~ xn-1的乘积
Python代码:
class Solution:
# @param {integer[]} nums
# @return {integer[]}
def productExceptSelf(self, nums):
size = len(nums)
output = [1] * size
left = 1
for x in range(size - 1):
left *= nums[x]
output[x + 1] *= left
right = 1
for x in range(size - 1, 0, -1):
right *= nums[x]
output[x - 1] *= right
return output
本文链接:http://bookshadow.com/weblog/2015/07/16/leetcode-product-array-except-self/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。