今天,在求职面试中我被问到一个问题: 我们有一个数组
[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)
我没有写回答。如何完成这项任务?
答案 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