题目描述:

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 };

 

posted on 2018-04-11 19:04  宵夜在哪  阅读(85)  评论(0编辑  收藏  举报