查找数组元素的产品

时间:2018-01-09 13:50:57

标签: java algorithm

今天,在求职面试中我被问到一个问题: 我们有一个数组

[3,1,2,4]

在itearion中编写不包含一个元素的元素组合并返回新数组的函数,它意味着

for 3 composition will be : 1*2*4 = 8

for 1 : 3*2*4=24

for 2 : 3*1*4 = 12

for 4: 3*1*2 = 6

答案是8,24,12,6 这很简单,但我有2个约束

1)您不能使用operator" /"

2)您的算法必须是O(n)

我没有写回答。如何完成这项任务?

1 个答案:

答案 0 :(得分:2)

此解决方案在数组上​​迭代两次。一旦进行乘法再进行除法,则使用幂运算来避免使用“/”字符。

public static void main(String[] args) {
    int[] a = {3, 1, 2, 4};
    int m = Arrays.stream(a).reduce(1, (left, right) -> left * right);
    IntStream.range(0, a.length).forEach(i -> {
        System.out.printf("%s : %02d%n", m, + (int) (m * Math.pow(a[i], -1.0)));
    });
}

打印:

24 : 08
24 : 24
24 : 12
24 : 06