我需要編寫一個方法,該方法接受一個整數數組,並檢查每個元素是否存在於此數組中的所有除數(數字本身和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