剑指offer-构建乘积数组
2017-07-27 21:06
253 查看
问题
题目:[剑指offer-构建乘积数组]思路
这个题目还是有一点难度的,很难考虑到。这个方法我也是参考了别人的方法。对于,B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]
可以分成两部分:A[0]A[1]…A[i-1] 以及 A[i+1]A[i+2]…A[n-1]这两部分,而这两部分分别是连续的。
所以,
记 P[i] = A[0]A[1]…A[i-1] = P[i-1] * A[i-1]
同理,Q[i] = A[i+1] * A[i+2] * … A[n-1] = Q[i+1]*A[i+1]
这两个数组可以累乘计算。
最后,B[i] = P[i] * Q[i] .
代码
class Solution { public: vector<int> multiply(const vector<int>& A) { int sz = A.size(); vector<int> ret(sz); if(!sz) return ret; vector<int> P(sz); // P[i] = A[0]*A[1]*...A[i-1] vector<int> Q(sz); // Q[i] = Q[i+1]*Q[i+2]...*Q[n-1] /* 由于PQ两个数组分别是左连续和右连续,因此可以累乘获得 */ P[0] = 1; for(int i = 1; i < sz;++i){ P[i] = P[i-1] * A[i-1]; } Q[sz-1] = 1; for(int i = sz-2; i >= 0; --i){ Q[i] = Q[i+1] * A[i+1]; } for(int i = 0; i < sz; ++i){ ret[i] = P[i] * Q[i]; } return ret; } };
相关文章推荐
- 剑指offer--构建乘积数组
- 牛客网剑指offer-构建乘积数组
- 【剑指offer】构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer—构建乘积数组
- 剑指offer:构建乘积数组
- 【剑指Offer】构建乘积数组
- 剑指Offer:构建乘积数组
- 【剑指offer】构建乘积数组(注意优化空间)
- 剑指offer-构建乘积数组-php
- (C++)剑指offer-51:构建乘积数组(数组)
- 剑指offer_数组---构建乘积数组
- 【剑指Offer学习】【面试题52:构建乘积数组】
- 剑指Offer--052-构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer-51.构建乘积数组
- 剑指offer - 面试题52:构建乘积数组
- 剑指offer-构建乘积数组
- 构建乘积数组--剑指Offer
- 剑指Offer-66:构建乘积数组