问题描述
摘要)
- math.prod()的时间复杂度是多少
- 如何改进此代码以获取通行证
详细信息)
目前在Leetcode上从事“除自我以外的产品”的研究
我的第一个代码是:
class Solution:
def productExceptSelf(self,nums: List[int]) -> List[int]:
product_list = []
for index in range(len(nums)):
deleted_value = nums.pop(index)
product_list.append(math.prod(nums))
nums.insert(index,deleted_value)
return product_list
并认为它是在动态数组中“删除并插入”,从而导致时间限制。
因此,我更正了以下几行:
class Solution:
def product_except_self(self,nums):
product_list = []
for index in range(len(nums)):
temp = nums[index]
nums[index] = 1
product_list.append(math.prod(nums))
nums[index] = temp
return product_list
就我而言,'='和append操作的时间复杂度为O(1),因此认为math.prod是这里提出的问题,除了'for'是O(n)
请告诉我这里的时间复杂度,以及通过此问题的一些技巧。
解决方法
-
几乎肯定是O(n);追加为O(1),但在许多调用中摊销。这取决于实现,但是一些调用将不得不重新分配更大的内存,并将到目前为止存在的所有内容复制到新空间中。
-
这些挑战的要点是使您思考可以采取的更好方法,并练习学习认识到您如何思考通常的方法以及将您带到更好的方法的途径,以便您对于非平凡的问题,我们将能够更轻松地进行这种思考。就是说:您可以只计算一次完整的数组乘积,然后将该乘积除以每个数组元素即可得出结果。使用生成器或列表理解。