《剑指offer》构建乘积数组
2015-09-13 15:42
288 查看
【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目链接:http://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
思路
我们开一个数组用来存对于第i位而言,前i-1的乘积。
那么对于新数组ans[i],我们已经求得了A[1]*A[2]*...*A[i-1],
然后我们再从尾到头扫描一遍,对于当前第i位,我们任然按照前面的思想,使用一个变量来累乘A[len-1]*...A[i+1],并更新结果数组
class Solution
{
public:
vector<int> multiply(const vector<int>& A)
{
vector<int> ans;
int len = A.size();
if(len==0)
return ans;
ans.push_back(1);
for(int i = 0; i<len-1; i++)
ans.push_back(ans.back()*A[i]);
int tmp = 1;
for(int i = len-1; i>=0; i--)
{
ans[i]*=tmp;
tmp*=A[i];
}
return ans;
}
};
相关文章推荐
- 解决php的It is not safe to rely on the system’s timezone settings的问题
- Django调用JS、CSS、图片等静态文件
- 扩展Bootstrap Tooltip插件使其可交互
- 接近带给你AngularJS - 经验说明示例
- Hello HTML(初识HTML)
- 《剑指offer》数组中重复的数字
- YARN源码分析(四)-----Journalnode
- js创建对象的几个常用方式
- js刷新方式
- HTML5
- Bootstrap简介
- CSS BFC
- CSS行高——line-height
- Perfect Squares
- ExtJS4组件_form表单配置-属性-方法详解
- 因为yii2中jquery位置默认在最下方,可将自定义js位置放在下方
- Angular遇上CoffeeScript - NgComponent封装
- js原生removeclass方法
- JQuery源码之“对象的结构解析”
- CSS解决未知高度的垂直水平居中自适应问题