zoukankan      html  css  js  c++  java
  • 【LeetCode & 剑指offer刷题】数组题12:66 构建乘积数组

    66 构建乘积数组

    66 构建乘积数组

    66 构建乘积数组

    题目描述

    给定一个数组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]的值可以看作下图的矩阵中每行的乘积。
    下三角用连乘可以很容求得,上三角,从下向上也是连乘。
    因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。
    class Solution
    {
    public:
        vector<int> multiply(const vector<int>& A)
        {
            if(A.empty()) return vector<int>();
            vector<int> B(A.size());
           
            //计算下三角连乘
            B[0] = 1;
            for(int i = 1; i<B.size(); i++) // i=1~n-1
            {
                B[i] = B[i-1] * A[i-1]; //计算连乘值
            }
            //计算上三角连乘
            int temp = 1;
            for(int j = B.size()-1; j>=1; j-- ) //j=n-1~1
            {
                temp *= A[j]; //计算连乘值
                B[j-1] *= temp;
            }
           
            return B;
        }
    };
     
     
     
  • 相关阅读:
    换盘符cd的用法
    matplotlib.pyplot 属性用法
    类 __init__的注意事项
    Python File(文件) 方法
    Spyder 快捷键
    python路径引用r的含义
    VBA+SQL transform pivot union联合查询的基础应用
    Box-Cox变换
    静态字段引用的对象为什么不会被GC回收
    编译hotspot8
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10224367.html
Copyright © 2011-2022 走看看