zoukankan      html  css  js  c++  java
  • 【剑指offer】不使用除法,构建乘积数组,C++实现

    # 题目

    image

    # 思路

    C[i] = A[0] * A[1] * … * A[i-1],D[i]A[i+1] * … * A[n-1],则C[i]按照从上到下的顺序计算,即C[i] = C[i-1] * A[i-1]。D[i]按照从下而上的顺序计算,即D[i] = D[i+1] * A[i+1] 。由C[i] 和 D[i]可以退出计算B[i]的公式,即B[i] = C[i] * D[i] = C[i-1] * A[i-1] * D[i+1] * A[i+1] 。

    image

    # 代码

    #include <iostream>
    #include <vector>
    using namespace std;
    
    // 构建乘积数组
    class Solution {
    public:
        vector<int> multiply(const vector<int>& A) 
        {
            // 存储结果
            int n=A.size();
            vector<int> b(n);
            
            // 计算结果
            int ret;
            ret = 1;// 存储C[i]
            for(int i=0;i<n;ret*=A[i++]){
                b[i]=ret;
            }
            
            ret = 1;// 存储D[i]
            for(int i=n-1;i>=0;ret*=A[i--]){
                b[i]*=ret;
            }
            return b;
        }
    };
    
    int main()
    {
        const vector<int> a = {1,2,3,4,5};
        Solution solution;
        solution.multiply(a);
        return 0;
    }

     

  • 相关阅读:
    noi 1944 吃糖果
    noi 6049 买书
    noi 2985 数字组合
    noi 2728 摘花生
    noi 2718 移动路线
    noi 4977 怪盗基德的滑翔翼
    noi 8780 拦截导弹
    noi 1996 登山
    NOI 动态规划题集
    图的色数
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/9014744.html
Copyright © 2011-2022 走看看