首页 > 编程语言 > 详细

构建乘积数组

时间:2017-09-18 21:19:00      阅读:213      评论:0      收藏:0      [点我收藏+]

#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;

}

构建乘积数组

原文:http://www.cnblogs.com/bananaa/p/7545027.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!