LeetCode第321题:创建乘积数组:LeetCode平台上的第321题是一道关于数组操作的算法问题。题目要求根据给定的数组nums
,创建一个新的数组target
,使得target[i]
等于原数组中除i
位置元素之外的所有元素的乘积。换句话说,新数组中的每个值表示原数组中不包含当前索引元素的乘积。例如,如果nums = [1, 2, 3, 4]
,那么target
应该是[24, 12, 8, 6]
。这道题目考察的是数组处理和动态规划的概念。解决这个问题时,可以采用前缀和或后缀和的方法,或者使用两个辅助数组分别存储到当前位置为止的乘积和从当前位置到末尾的乘积。这有助于在O(n)的时间复杂度内完成任务,同时保持空间复杂度为O(1)。
解题思路:
-
初始化两个数组
prefixProduct
和suffixProduct
,大小与nums
相同,且所有元素初始化为1。 -
遍历
nums
,对于每个i
,更新prefixProduct[i]
为prefixProduct[i-1] * nums[i]
,prefixProduct
保存从0到i
位置的乘积。 -
从后向前遍历
nums
,更新suffixProduct[i]
为suffixProduct[i+1] * nums[i]
,suffixProduct
保存从i
到末尾的乘积。 -
创建新数组
target
,对于每个i
,target[i]
设置为prefixProduct[i-1] * suffixProduct[i]
。
Python代码实现:
def createTargetArray(nums, index):
prefixProduct = [1] * len(nums)
suffixProduct = [1] * len(nums)
for i in range(1, len(nums)):
prefixProduct[i] = prefixProduct[i - 1] * nums[i]
for i in range(len(nums) - 2, -1, -1):
suffixProduct[i] = suffixProduct[i + 1] * nums[i]
target = [prefixProduct[i - 1] * suffixProduct[i] for i in index]
return target
暂无评论