题目描述:
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]
.
解题思路:
这题我们可以先创建一个数组ret,令ret的第一个数为1,然后用循环让ret数组中从第二个元素开始的值等于它的上一个元素乘nums中的对应元素。
因此第一次遍历过后可以得到ret中的元素分布为[1, nums[0], nums[0]*nums[1],……, ∏nums[i](i<n-1)]。
接下来可以让一个数从nums数组的末尾开始乘,直到乘到nums[1],每一次乘后都要让ret的对应元素乘这个数补齐ret当前元素未乘的部分。
代码:
1 class Solution { 2 public: 3 vector<int> productExceptSelf(vector<int>& nums) { 4 int n = nums.size(); 5 vector<int> ret(n, 1); 6 for(int i = 1; i < n; i++){ 7 //第一次遍历 8 ret [i] = nums[i-1] * ret[i-1]; 9 } 10 for(int i = n - 1; i > 1; i--){ 11 //第二次遍历 12 ret[0] *= nums[i]; 13 ret[i-1] *= ret[0]; 14 } 15 ret[0] *= nums[1]; //避免乘相同的数 16 return ret; 17 } 18 };