文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
1. Description
Product of Array Except Self2. Solution
解析:可以使用两个数组left, right
分别保存从左边到第i个元素的积以及从右边到第i个元素的积,则结果中result[i]=left[i-1] * right[i+1]
,这种情况下的空间复杂度为O(n)
。另一种方式是,计算左边元素积的同时更新结果数组,计算右边积的同时也更新结果数组,这种情况下的空间复杂度为O(1)
。
- Version 1
class Solution:
def productExceptSelf(self, nums):
length = len(nums)
result = [1] * length
left = [1] * length
right = [1] * length
left[0] = nums[0]
right[-1] = nums[-1]
for i in range(length):
if i > 0:
left[i] = left[i - 1] * nums[i]
if i < length - 1:
right[-i - 2] = nums[-i - 2] * right[-i - 1]
for i in range(length):
if i == 0:
result[i] = right[i + 1]
elif i == length - 1:
result[i] = left[i - 1]
else:
result[i] = left[i - 1] * right[i + 1]
return result
- Version 2
class Solution:
def productExceptSelf(self, nums):
length = len(nums)
result = [1] * length
left = 1
right = 1
for i in range(length - 1):
left *= nums[i]
result[i + 1] = result[i + 1] * left
for i in range(length - 1, 0, -1):
right *= nums[i]
result[i - 1] = result[i - 1] * right
return result
网友评论