我需要编写一个方法,该方法接受一个整数数组,并检查每个元素是否存在于此数组中的所有除数(数字本身和1除外)。如果是,该方法将返回true。阵列内的除数
例如,下面的数组将返回true:
4,5,10,2
我想不出什么足够的效率来实现。你们能帮我出去吗?我一直在想通过遍历数组中的每个元素,搜索所有的除数,将它们放在数组上,然后返回数组,然后与原始数组中的元素进行比较。
这是一个可能的解决方案,它可以工作,但我想知道其他可能的解决方案。
编辑:这是我想出来的代码,但它超级慢。难道你们帮我优化它一点点?:
import java.util.Arrays;
public class Divisors {
public static void main(String[] args) {
int[] numbers = { 4, 5, 10, 2 };
boolean flag = true;
for (int num : numbers) {
if (num % 2 != 0) {
for (int subNum = 1; subNum < num/2; num += 2) {
if(num%subNum == 0 && subNum != 1) {
if(!Arrays.asList(numbers).contains(subNum)) {
flag = false;
}
}
}
} else {
for (int subNum = 1; subNum < num/2; num++) {
if(num%subNum == 0 && subNum != 1) {
if(!Arrays.asList(numbers).contains(subNum)) {
flag = false;
}
}
}
}
}
System.out.println("Result is: "+flag);
}
}
“我想不出有效率的东西能实施,你们能帮我出去吗?”从效率低下开始,在代码审查上分享代码,他们会帮助你改进。如果你确实有尝试过的东西,但它不起作用,请在这里分享这些代码以及你遇到的错误。 – 2014-12-05 19:36:08
把所有的元素放在一个'TreeSet'中,找到每个元素的所有除数(可选地将它们放在'Set'中),检查是否存在。集合具有良好的查找/交集性能。 –
9000
2014-12-05 19:36:50
@ 9000这也需要太多时间= \ – 2014-12-05 19:39:57