劍指offer-構建乘積數組

題目描述

給定一個數組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[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)

思路

  • 將B數組弄成矩陣
  • 連乘計算上三角
  • 連乘計算下三角並將之乘到上三角中

AC代碼

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        vector<int>res(A.size(),1); //需要被初始化
       
        //構建下三角
        for (int i = 1;i < A.size();i++)
        {
            res[i] = res[i-1] * A[i-1];
        }
        //將上三角的值乘下三角
        int temp = 1;
        for (int i = A.size()-2;i>=0;i--)
        {
            temp = temp * A[i+1];
            res[i] = temp * res[i];
        }
        return res;
    
    }
};
int main()
{
    vector<int>a = {1,2,3};
    Solution so;
    vector<int>res = so.multiply(a);
    cout << res.size();
    cout << res[2] << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章