zoukankan      html  css  js  c++  java
  • 剑指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]。不能使用除法。

    思路分析:

    思路一:由于不能使用除法,首先想到的就是对于A中每个元素用遍历的方式,去判断是否要乘到B数组的对应位置,这样的时间复杂度为O(n^2),超时。

    思路二:用空间换时间,将B的构造分为两段,第一段为0到i-1,第二段为i+1到n,那么在构造第一段时,从前往后构造,B[i]=B[i-1]*A[i-1];构造第二段时,从后往前构造,B[i]=B[i+1]*A[i+1]。最后将两段乘起来,即为最终所求的数组。

    代码:

     1 class Solution {
     2 public:
     3     vector<int> multiply(const vector<int>& A) {
     4         int len = A.size();
     5         if(len<=0)
     6             return A;
     7         vector<int> B(len, 1);
     8         vector<int> tmp(len, 1);
     9         for(int i=1; i<len; i++)
    10             B[i] = B[i-1]*A[i-1];
    11         for(int i=len-2; i>=0; i--)
    12             tmp[i] = tmp[i+1]*A[i+1];
    13         for(int i=0; i<len; i++)
    14             B[i] = B[i]*tmp[i];
    15         return B;
    16     }
    17 };
  • 相关阅读:
    Netty之Channel*
    Netty之ByteBuf
    Spark On Yarn的各种Bug
    外网无法访问hdfs文件系统
    报错:Unsupported field: HourOfDay
    启动spark-shell --master yarn的bug
    KMP算法思路
    单例模式的正确实现
    redis 持久化
    记一次MacOs降级过程
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11048413.html
Copyright © 2011-2022 走看看