您的位置:首页 > 编程语言 > C语言/C++

(C++)剑指offer-51:构建乘积数组(数组)

2018-02-17 21:20 309 查看

剑指offer-51:构建乘积数组

目录

剑指offer-51:构建乘积数组

目录
1题目描述

2题目分析

3题目答案

1题目描述

给定一个数组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]。不能使用除法。



2题目分析



B[i]的意义是A数组不包括i位置的所有乘积,分为 i左边的元素乘积和 i右边的所有元素乘积。

第一个for计算i左边的乘积,第二个for计算右边的。

初始化B[0]=1,是因为0左边没有元素,所以乘积为1。

3题目答案

class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> vec;
int size=A.size();
if(size==0)
return vec;
vec.push_back(1);

for(int i=0; i<size-1; i++)   //左边的乘积
vec.push_back(vec.back()*A[i]);

int tmp=1;
for(int i=size-1; i>=0; i--)
{
vec[i]=vec[i]*tmp;
tmp=tmp*A[i];
}
return vec;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: