面试题52:缺少i的乘积数组

vector<int> multiply(const vector<int>& A) {
    int len = A.size();
    vector<int> result(len, 1);
    result[0] = 1;
    for (int i = 1; i < len; i++)
    {
        result[i] = result[i - 1] * A[i - 1];    //result[i]保存下三角
    }
    int tmp = 1;
    for (int i = len - 2; i >= 0; i--)
    {
        tmp = tmp * A[i + 1];    //tmp保存上三角
        result[i] *= tmp;
    }
    return result;
}
时间: 2024-10-18 17:27:37

面试题52:缺少i的乘积数组的相关文章

(剑指Offer)面试题52:构建乘积数组

题目: 给定一个数组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].不能使用除法. 思路: 方法1: 直接连乘n-1个数,得到B[i]: 时间复杂度:O(n^2) 方法2: 构建前向乘积数组C[i]=A[0]*A[1]*...*A[i-1],即C[i]=C[i-1]*A[i-1]: 构建后向乘积数组D[i]=A[n-1]*A[n-2]*...A[n-i+1],即D[i]

剑指Offer对答如流系列 - 构建乘积数组

面试题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]=A[0]*A[1]*.....*A[n-1]/A[i]表示,使用除法时要特别注意A[i]等于0的情况. 因为每个B[i]都会有重复,其中有着一定的规律性,我们可以尝试找规律,利用规律来解答这道问题. B

《剑指offer》第六十六题:构建乘积数组

// 面试题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].不能使用除法. #include <cstdio> #include <vector> using namespace std; //把B[i]看成[=A[0],A[1],… ,A[i-1],1,A[i+1],…,A[n-1]] //对于B,就成

[PHP] 算法-构建排除当前元素的乘积数组的PHP实现

构建乘积数组给定一个数组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].不能使用除法. 1. 这题的意思是 B数组的元素是A数组中所有元素的乘积,但是要排除掉当前元素2. A数组在i元素左右分成两部分,分别相乘3. left数组是 A[0]...A[n-1], right数组是A[1]...A[n]4. 组合出新的数组 $A=array(1,2,3,4); multip

剑指offer-66 构建乘积数组

剑指offer-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[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];) 思路: 自己解答: import java.util.ArrayList; public class So

构建一个乘积数组

给定一个数组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];) class Solution { public: vector<int> multiply(const vector<int>&

【剑指Offer学习】【面试题52:构建乘积数组】

题目:给定一个数组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[]={1,2,3}求B[] B[0]=A[1]×A[2]=2×3=6 B[1]=A[0]×A[2]=1×3=3 B[2]=A[0]×A[1]=1×2=2 1.B[0]初始化为1,从下标i=1开始,先求出C[i]的值并放入B[i],即B[i]=C[i]=C[i-1]×A[i-1],所以B

52、构建乘积数组

题目:给定一个数组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] = c[i]* d[i] //c[i] = A[0]*A[1]*...*A[i-1] = C[i-1] * A[i-1]; //D[I] = A[i-1]*A[i+1]*...*A[n-1] = a[i+1]*D[I+1]; 注意: 用一个变量B[]表示,C和D im

《剑指offer》:[52]构建乘积数组

题目:给定一个数组A[0,1,2...N-1],请构建一个数组B[0,1,2,...N-1],使B中的元素B[i]=A[0]*A[1]*...*A[i-1]*a[i+1]*...*a[n-1],不能使用除法. 解决思路:通过正反两次来求B[i]; 正着:B[i]=A[0]*...A[i-1]; 反着:temp = B[N]*...B[i+1]; 最后通过B[i]*temp就可以求出结果了. 以A[0,1,2,3,4],求B[0,1,2,3,4]为例: 步骤分析: 第一步:b[0] = 1; 第二