标签:mes end div bubuko 图片 public size class out
给定一个数组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]。不能使用除法。
把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[n-2]*A[n-1]两部分的乘积。
不妨设定C[i]=A[0]*A[1]*...*A[i-1],D[i]=A[i+1]*...*A[n-2]*A[n-1]。C[i]可以用自上而下的顺序计算出来,即C[i]=C[i-1]*A[i-1]。类似的,D[i]可以用自下而上的顺序计算出来,即D[i]=D[i+1]*A[i+1]。
#include <iostream> #include <vector> using namespace std; class Solution { public: vector<int> multiply(const vector<int> &a); }; vector<int> Solution::multiply(const vector<int> &a) { vector<int> b(a.size(),1); if(a.empty()||a.size()<0) return b; b[0]=1; for(int i=1;i<a.size();++i)//计算上三角,计算上图1的范围 b[i]*=b[i-1]*a[i-1]; int temp=1; for(int i=a.size()-2;i>=0;--i)//计算下三角,计算上图2的范围 { temp*=a[i+1]; b[i]*=temp; } return b; } int main() { vector<int> a{1,2,3,4,5,6,7,8,9}; Solution s; vector<int> b=s.multiply(a); for(auto v:b) cout<<v<<‘ ‘; cout<<endl; return 0; }
标签:mes end div bubuko 图片 public size class out
原文地址:https://www.cnblogs.com/tianzeng/p/10329663.html