美文网首页
剑指offer 51-55

剑指offer 51-55

作者: 愤怒的熊猫V | 来源:发表于2020-02-17 22:50 被阅读0次

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[0]和B[n-1] = 1)

通过B[i]的构成不难发现它总由左右两个部分组成,所以我们可以用两个辅助数组,一个数组left用来存从0到i-1的所有乘积,一个数组right用来存length-1到i+1的所有乘积,然后B[i]=left[i-1]*right[i+1]即可。
代码如下

public class Solution {
    public int[] multiply(int[] A) {
        int length = A.length;
        int[] left = new int[length];
        int[] right = new int[length];
        int[] res = new int[length];
        left[0] = A[0];
        right[length-1] = A[length-1];
        for(int i = 1;i<length-1;i++){
            left[i] = A[i]*left[i-1];
        }
        for(int j = length-2;j>0;j--){
            right[j] = A[j]*right[j+1];
        }
        res[0] = right[1];
        res[length-1] = left[length-2];
        for(int k=1;k<length-1;k++){
            res[k] = left[k-1]*right[k+1];
        }
        return res;
    }
}

相关文章

  • 剑指offer 51-55

    51.构建乘积数组 通过B[i]的构成不难发现它总由左右两个部分组成,所以我们可以用两个辅助数组,一个数组left...

  • 全网最全剑指offer题目解答

    【剑指offer】Java版代码(完整版) 【剑指offer】1-10题 【剑指offer】11-20题 【剑指o...

  • 剑指offer 和 leetcode题目

    剑指offer leetcode

  • 单例模式

    单例模式 最近在看《剑指offer》,根据《剑指offer》的讲解,结合《effectiveJava》简单学习了一...

  • 年龄排序

    摘抄资料:《剑指offer》

  • 剑指offer

    第一题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,...

  • 《剑指offer》

    4.调整数组顺序使奇数位于偶数前面 题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇...

  • 剑指offer

    二维数组中查找数在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到...

  • 剑指offer

    剑指offer题目 1 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。...

  • 剑指offer

    1.链表反转 1、输出倒数第k个数

网友评论

      本文标题:剑指offer 51-55

      本文链接:https://www.haomeiwen.com/subject/jkqwfhtx.html