【发布时间】:2021-04-19 04:35:41
【问题描述】:
我有一个数字列表,现在我想从列表中取出一个数字并检查有多少元素可以将该数字除以余数为 0。
这是我的代码:
public static void countDivibilies(List<Integer> list) {
for (int i = 0; i < list.size(); i++) {
int e = list.get(i);
int count = 0;
for (int j = 0; j < list.size(); j++) {
int k = list.get(j);
if (e % k == 0) {
count++;
}
}
System.out.println(e + " : " + count);
}
}
对于样本输入:
2, 4, 8, 2
输出是:
2 : 2
4 : 3
8 : 4
2 : 2
但是这段代码以O(n<sup>2</sup>) 的时间复杂度运行。但我的输入列表大小范围最大为 105,每个元素也在 1 到 105 之间。那么如何才能提高这个程序的时间复杂度呢?
【问题讨论】:
-
好吧,通常如果
2有两个潜在的除数,而2是4的一个除数,我倾向于说它比2多了一个除数。提示:首先对列表进行排序 -
每个元素的最大值是多少?
-
@iota,每个元素也是 10 次方 5,我现在用它来更新我的问题
-
所以这个任务不在线,是你自己编的? (这也可以解释名称
countDivibilies:-)