构建乘积数组

构建乘积数组

给定一个数组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]。不能使用除法。

  • 如果没有不能使用除法的限值 则可以使用公式
  • 现在要求不能使用除法,只能用其他方法。一种直观的解法是用连乘n-1个数字得到B[i]。显然这种方法需要O(n^2)的时间构建整个数组B
  • 可以把B[i]=A[0]*A[1] * A[] ******* A[i-1] * A[i+1] * * * A[n-1]看做A[0] *A[1] * A[2] * A[i-1] 和 A[i+1] x A[i+2 ] x A[n-2] x A[n-1]两部分的乘积;因此数组B可以用一个矩阵来创建。B[i]为矩阵第i行的所有元素的乘积。
  • 在这里插入图片描述

代码

package A数组;

import javax.annotation.PreDestroy;
import java.util.Arrays;

/**
 * @Author Zhou  jian
 * @Date 2020 ${month}  2020/2/16 0016  13:23

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


 */
public class Problem6
{

    public static void main(String[] args) {

        Problem6 problem6 = new Problem6();

        int[] array1 = {1, 2, 3, 4, 5};
        System.out.println(Arrays.toString(problem6.multiply(array1))); // double expected[] = {120, 60, 40, 30, 24};
        int[] array2 = {1, 2, 0, 4, 5};
        System.out.println(Arrays.toString(problem6.multiply(array2))); // double expected[] = {0, 0, 40, 0, 0};



    }

    public int[] multiply(int[] A) {

        int num = A.length;//数组的长度
        int[] B = new int[num];


        B[0]=1;
        for(int i=1;i<num;i++){
            //  // 第一步每个result[i]都等于于data[0]*data[1]...data[i-1]
            //            // 当i=n-1时,此时result[n-1]的结果已经计算出来了【A】
            B[i]=B[i-1]*A[i-1];
        }

        //        // tmp保存data[n-1]*data[n-2]...data[i+1]的结果
        int temp =1;

        for(int t =num-2;t>=0;t--){
            temp *=A[t+1];
            B[t]=B[t]*temp;//B[t]在第一步基础上
        }

        return B;



    }








}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值