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


思路:

把前半部分与后半部分保存到两个不同的数组中,用front[i]表示从A[0]…到A[i - 1]的值,用 back[i]表示从A[i + 1]…到A[n - 1]的值,循环一次,将结果保存在两个数组中,再遍历一次相乘即可得到最后结果。


算法实现:

import java.util.ArrayList;
public class Solution {
    public int[] multiply(int[] A) {
        int n = A.length;
        //front[i]就是从A[0]...到A[i - 1]的值
        int[] front = new int[n];
        if(n<=1) return front;
        /* back[i]就是从A[i + 1]...到A[n - 1]的值
         * back数组的第一位从最后一位开始,所以back[n - 1]=1
         */
        int[] back = new int[n];
        front[0] = back[n-1] = 1;
        //分别计算前半部分和后半部分的值,并分别将结果保存在front与back数组中
        for(int i=1;i1]*A[i-1];
            back[n-i-1] = back[n-i]*A[n-i];
        }
        //将两个计算结果两次相乘得到最后的结果
        for(int i=0;i//返回front数组即为所求
        return front;
    }
}

你可能感兴趣的:(剑指offer)