Product of Array Except Self

求除了自己之外数组所有元素的乘积。

新建一个数组,每个位置保存前面所有数的乘积。

反过来,另一个数组每个位置保存后面所有数乘积。

两个数组每个位置相乘即为所求。这样时间复杂度为O(n);

为了保证O(1)space,所以上面的操作进行融合,具体见代码。

 1 class Solution {
 2 public:
 3     vector<int> productExceptSelf(vector<int>& nums) {
 4         //思路 顺序求前面所有数的乘机,再反过来,
 5         int n = nums.size();
 6         vector<int> v;
 7         int tmp=1;
 8         v.push_back(1);
 9         for(int i=1;i<n;i++)
10         {
11             tmp *= nums[i-1];
12             v.push_back(tmp);
13         }
14         tmp = nums[n-1];
15         for(int j=n-2;j>=0;j--)
16         {
17             v[j] *= tmp;
18             tmp *= nums[j];
19         }
20         
21         return v; 
22     }
23 };
posted @ 2015-08-20 21:31  醉剑客  阅读(149)  评论(0编辑  收藏  举报