zoukankan      html  css  js  c++  java
  • [剑指Offer] 51.构建乘积数组

    题目描述

    给定一个数组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]中的一部分,然后倒过来按上三角中的分布规律,把另一部分也乘进去。

     1 class Solution {
     2 public:
     3     vector<int> multiply(const vector<int>& A) {
     4         int n = A.size();
     5         vector<int> B(n,1);
     6         //计算下三角的值
     7         for(int i = 1;i < n;i ++){
     8             B[i] = B[i - 1] * A[i - 1];
     9         }
    10         //计算上三角的值
    11         int temp = 1;
    12         for(int i = n - 2;i >= 0;i --){
    13             temp *= A[i + 1];
    14             B[i] *= temp;
    15         }
    16         return B;
    17     }
    18 };
  • 相关阅读:
    边框
    文本样式
    框架
    表格
    列表
    标签
    常用类--包装类
    常见类 --Object
    日志
    异常
  • 原文地址:https://www.cnblogs.com/lca1826/p/6544969.html
Copyright © 2011-2022 走看看