leetcode 238

从前处理一边,再从后处理一遍,从前处理的时候是从第一个数到当前所有数的积,从后处理的时候是从最后一个数到当前数的积。

当求第i个数的时候只需要讲从前处理到i-1的积乘于从后处理到i+1的积,即可得到需要求的。

 1 class Solution {
 2 public:
 3     vector<int> productExceptSelf(vector<int>& nums) {
 4         int n=nums.size();
 5         vector<int>left(n,1),right(n,1),result;
 6         left[0]=nums[0];
 7         right[n-1]=nums[n-1];
 8         for(int i=1;i<n;i++) 
 9             left[i]=nums[i]*left[i-1];
10         for(int i=n-2;i>=0;i--)
11         right[i]=nums[i]*right[i+1];
12         result.push_back(right[1]);
13         for(int i=1;i<n-1;i++){
14           int k=left[i-1]*right[i+1];
15           result.push_back(k);
16         }
17         result.push_back(left[n-2]);
18         return result;
19     }
20 };

 

posted @ 2016-07-21 15:48  HYDhyd  阅读(126)  评论(0编辑  收藏  举报