剑指offer 面试题52 构建乘积数组

来源:互联网 发布:电子商务美工就业前景 编辑:程序博客网 时间:2024/06/08 13:20

剑指offer 面试题52 构建乘积数组

题目: 给定一个数组 A[0, 1, …, n-1],请构建一个数组 B[0, 1, …, n-1],
其中 B 中的元素 B[i] = A[0] * A[1] * A[2] * … * A[i+1] * A[i+2]。
不能使用除法运算。

package algorithm.foroffer.top60;import org.junit.Test;import java.util.Arrays;/** * description: * * @author liyazhou * @create 2017-06-06 17:36 * 面试题52:构建乘积数组 * * 题目: *      给定一个数组 A[0, 1, ..., n-1],请构建一个数组 B[0, 1, ..., n-1], *      其中 B 中的元素 B[i] = A[0] * A[1] * A[2] * ... * A[i+1] * A[i+2]。 *      不能使用除法运算。 * * 考查点: *      1. 找规律,提高计算速度 *      2. 把计算过的,且以后会用到的数据保存起来,减少计算次数,提升执行效率 * * 思路: *      1. B[i] = A[0] * A[1] * A[2] * ... * A[i+1] * A[i+2] * ... * A[n-1] *         可以定义,B[i] = C[i] + D[i] *         其中,C[i] = A[0] * A[1] * A[2] * ... * A[i-1], *         D[i] = A[i+1] * A[i+2] * ... * A[n-1] *              = A[n-1] * A[n-2] * ... * A[i+1] * *         则 B[i+1] = C[i+1] * D[i+1], *         其中,C[i+1] = C[i] * A[i], D[i+1] = A[n-1] * A[n-2] * ... * A[i+2] * */public class Test52 {    public int[] multiply(int[] array){        if (array == null || array.length == 0) return null;        int[] multiArr = new int[array.length];        multiArr[0] = 1;        for (int i = 1; i < array.length; i ++)            multiArr[i] = multiArr[i-1] * array[i-1];        int tmp = 1;        for (int i = array.length-2; i >= 0; i --){            tmp *= array[i + 1];            multiArr[i] *= tmp;        }        return multiArr;    }    @Test    public void test(){        int[] array = {1, 2, 3, 4, 5};        int[] multiArr = multiply(array);        System.out.println(Arrays.toString(multiArr));    }}
阅读全文
1 0
原创粉丝点击