class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
}
};
238. 除自身以外数组的乘积
给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请不要使用除法,且在 O(n)
时间复杂度内完成此题。
示例 1:
输入: nums =[1,2,3,4]
输出:[24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3] 输出: [0,0,9,0,0]
提示:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内
进阶:你可以在 O(1)
的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
原站题解
golang 解法, 执行用时: 32 ms, 内存消耗: 7.6 MB, 提交时间: 2020-11-06 16:47:27
func productExceptSelf(nums []int) []int { length, R := len(nums), 1 ans := make([]int, length) ans[0] = 1 for i:=1;i<length;i++ { ans[i] = ans[i-1] * nums[i-1] } for i:=length-2;i>-1;i-- { ans[i] *= R * nums[i+1] R *= nums[i+1] } return ans }
python3 解法, 执行用时: 80 ms, 内存消耗: 18.1 MB, 提交时间: 2020-11-06 16:39:12
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: length = len(nums) ans = [0]*length ans[0] = 1 for i in range(1, length): ans[i] = ans[i-1] * nums[i-1] R = 1 for i in range(length-2, -1, -1): ans[i] *= R * nums[i+1] R *= nums[i+1] return ans
python3 解法, 执行用时: 88 ms, 内存消耗: 19.3 MB, 提交时间: 2020-11-06 16:35:41
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: length = len(nums) L, R, ans = [0]*length, [0]*length, [0]*length L[0] = R[length-1] = 1 for i in range(1, length): L[i] = L[i-1] * nums[i-1] for i in range(length-2, -1, -1): R[i] = R[i+1] * nums[i+1] for i in range(0, length): ans[i] = L[i] * R[i] return ans