力扣刷题Day 41:除自身以外数组的乘积(238)
1.题目描述
2.思路
方法1:搞一个数组存放各元素之前所有数的乘积(头为1),再搞一个数组存放各元素之后所有数的乘积(尾为1)。
方法2:上面的方法是很好理解的,在此基础上应该如何优化呢?那就是弃用prev_product数组,改用变量记录前面数的乘积,并且取消latter_product数组,直接在res数组上修改乘积。
3.代码(Python3)
方法1:
class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:prev_product = [1]latter_product = [1]res = []for i in range(1, len(nums)):prev_product.append(prev_product[i - 1] * nums[i - 1])for i in range(len(nums) - 1, 0, -1):latter_product.insert(0, latter_product[0] * nums[i])for i in range(0, len(nums)):res.append(prev_product[i] * latter_product[i])return res
方法2:
class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:res = [1]for i in range(len(nums) - 1, 0, -1):res.insert(0, res[0] * nums[i])prev_product = 1for i in range(0, len(nums)):if i != 0:prev_product *= nums[i - 1]res[i] *= prev_productreturn res
4.执行情况
方法1:
方法2:
5.感想
我尽力了,不知道还能怎么优化了。看了Krahets佬的题解和我的方法2完全一致,但是性能怎么这么差呢?