剑指offer-构建乘积数组
来源:互联网 发布:安卓apo源码 编辑:程序博客网 时间:2024/06/05 19:41
问题
题目:[剑指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; }};
阅读全文
0 0
- 剑指offer--构建乘积数组
- 《剑指offer》构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer:构建乘积数组
- [剑指offer]构建乘积数组
- 剑指offer|构建乘积数组
- 《剑指offer》-构建乘积数组
- 剑指offer 构建乘积数组
- 构建乘积数组--剑指Offer
- 【剑指offer】构建乘积数组
- 《剑指offer》构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer--构建乘积数组
- 构建乘积数组 剑指offer
- 剑指offer-构建乘积数组
- 剑指offer:构建乘积数组
- 【HDU 6047】Maximum Sequence(DP)
- B 树详解
- ajax+php实现注册页面中自动检测用户名是否已经注册的功能
- php app接口设计安全
- Java爬虫入门简介(一) —— HttpClient请求及其使用方法
- 剑指offer-构建乘积数组
- 树莓派raspberry pi安装qt的mysql驱动
- Unity 2017.1正式版发布
- 代理原理及实现
- JSP执行过程
- 类和接口的关系
- Eclipse中Hibernate配置
- 最新版Ghost 1.0 RC1上手体验
- ARM开发(5)基于STM32的UART串口通信实验