【LeetCode】238.Product of Array Except Self
题目:
Given an array of n integers where n > 1, nums
, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
题解:
有点类似于Trapping Rain Water,从左到右遍历元素,计算该元素左方的乘积,再由右向左,计算右方乘积,同时左右两个积相乘放入result中。
Solution 1 ()
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int n = nums.size(); vector<int> result(n,1); for(int i=1; i<n; ++i) { result[i] = result[i-1] * nums[i-1]; } int tmp = 1; for(int i=n-2; i>=0; --i) { tmp *= nums[i+1]; result[i] *= tmp; } return result; } };
比较直观的代码,维护左右两个矩阵。(from here)
Solution 2 ()
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int n = nums.size(); vector<int> result(n,0); vector<int> left(n,1), right(n,1); for(int i=0; i<n-1; ++i) { left[i+1] = left[i] * nums[i]; } for(int i=n-1; i>0; --i) { right[i-1] = right[i] * nums[i]; } for(int i=0; i<n; ++i) { result[i] = left[i] * right[i]; } return result; } };