【剑指offer】-构建乘积数组-42/67

简介: 【剑指offer】-构建乘积数组-42/67

1. 题目描述

给定一个数组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];)

2. 题目分析

  1. 我们可以比较清晰的看出,B数组中的值等于A数组中的值所有的乘积(不包括B下标)
  2. 类似于:B[1] = A[0] * A[2] * A[3] * A[4];因为题目描述中,不可以使用除法,所以我们没有办法用A数组的乘积除以B[i],我们画一个二维矩阵图来看一下。

    类似于上图,也就是说我们要先计算前半部分的乘积然后在乘以后半部分的乘积,这样可以得到一个完整的数组B。
  3. 具体思路,从前往后循环遍历一遍数组,依次相乘,这样数组的前半部分已经存储好,再从后往前循环遍历一遍数组,依次相乘,最后返回数组B

3. 题目代码

public static int[] multiply(int[] A) {
    if (A.length == 0) {
      return new int[0];
    }
    int[] B = new int[A.length];
    B[0] = 1;
    for (int i = 1; i < A.length; i++) {
      B[i] = B[i - 1] * A[i - 1];
    }
    int temp = 1;
    for (int i = A.length - 1; i >= 0; i--) {
      B[i] = temp * B[i];
      temp = temp * A[i];
    }
    return B;
  }


相关文章
|
7月前
|
机器学习/深度学习 算法
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
35 0
|
2天前
|
算法 测试技术 C++
【组合数学】【动态规划】【前缀和】1735生成乘积数组的方案数
【组合数学】【动态规划】【前缀和】1735生成乘积数组的方案数
|
2天前
|
存储 测试技术 索引
每日一题——除自身以外数组的乘积
每日一题——除自身以外数组的乘积
|
2天前
|
存储 算法
算法题解-除自身以外数组的乘积
算法题解-除自身以外数组的乘积
|
2天前
|
存储 人工智能 Java
每日一题《剑指offer》数组篇之构建乘积数组
每日一题《剑指offer》数组篇之构建乘积数组
37 0
每日一题《剑指offer》数组篇之构建乘积数组
|
2天前
|
存储 算法 Java
【算法训练-数组 二】【元素组合】两数之和、三数之和
【算法训练-数组 二】【元素组合】两数之和、三数之和
29 0
|
6月前
|
算法 索引
代码随想录训练营Day2:1.有序数组的平方 2.长度最小的子数组3,螺旋矩阵
代码随想录训练营Day2:1.有序数组的平方 2.长度最小的子数组3,螺旋矩阵
13 0
|
7月前
|
人工智能 算法 BI
剑指offer(C++)-JZ66:构建乘积数组(算法-其他)
剑指offer(C++)-JZ66:构建乘积数组(算法-其他)
|
8月前
|
算法 索引
Leetcode238.除自身以外数组的乘积
Leetcode238.除自身以外数组的乘积
41 0
|
10月前
|
存储 C语言 C++
【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组
【前缀和】238. 除自身以外数组的乘积/剑指 Offer 66. 构建乘积数组
51 0