每天一道剑指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]。不能使用除法。

public int[] multiply(int[] arr) {	
}
分析

规律题:

640?wx_fmt=jpeg

public int[] multiply(int[] arr) {	
    if(arr == null || arr.length == 0){	
        return arr;	
    }	
    int len = arr.length;	
    int[] arr1 = new int[len], arr2 = new int[len];	
    arr1[0] = 1;	
    arr2[len - 1] = 1;	
    for(int i = 1 ; i < len ; i++){	
        arr1[i] = arr1[i - 1] * arr[i - 1];	
        arr2[len - 1 - i] = arr2[len - i] * arr[len - i];	
    }	
    int[] res = new int[len];	
    for(int i = 0 ; i < len ; i++){	
        res[i] = arr1[i] * arr2[i];	
    }	
    return res;	
}

出自:http://www.zhenganwen.top

已获授权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值