构建乘积数组

#include<stdio.h>
#include<string.h>
#include <pthread.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <stdlib.h>
#include <sstream>
using namespace std;



class Solution {
public:
      /*
        B[i]可以看做矩阵(A组成的方阵去掉对角线)中每行的乘积
        下三角用连乘可以很容易求得,上三角,从下往上也是连乘
        因此思路是先计算下三角中的连乘,即计算B[i]中的一部分,
        然后倒过来按上三角中的分布规律,把另一部分也乘进去
        */
    vector<int> multiply(const vector<int>& A) {
        int length=A.size();
        vector<int>B(length);//初始化数组B时没有确定长度报错了额
        if(length!=0){
            B[0]=1;
            for(int i=1;i<length;i++){
                B[i]=B[i-1]*A[i-1];
            }
            int temp=1;
            for(int j=length-2;j>=0;j--){
                temp*=A[j+1];
                B[j]*=temp;
            }
        }
        return B;
    }
};

int main()
{
    Solution s;
    vector<int> A = { 0,1,1,1,1,1,1,1,1,1 };
    vector<int> B=s.multiply(A);
    for(size_t i=0;i<A.size();i++)
        cout<<B[i]<<" ";
    cout<<endl;
    return 0;

}

原文地址:https://www.cnblogs.com/bananaa/p/7545027.html