任务:找出从每个数组中选择一个元素的可能方法数量,使它们的总和小于 k
。
这是我的程序:
public static long process(List<Integer> a, List<Integer> b, List<Integer> c, List<Integer> d, int k) {
Collections.sort(a);
Collections.sort(b);
Collections.sort(c);
Collections.sort(d);
long total = 0;
// four layer for loop to check all combinations of four arrays
for (int i = 0; i < a.size(); i++) {
long v = a.get(i);
for (int j = 0; j < b.size() && v < k; j++) {
long v1 = b.get(j);
for (int m = 0; m < c.size() && v + v1 < k; m++) {
long v2 = c.get(m);
for (int l = 0; l < d.size() && v + v1 + v2 < k; l++) {
long v3 = d.get(l);
if (v + v1 + v2 + v3 <= k) {
total = total + 1;
} else {
break;
}
}
}
}
}
return total;
}
这是在面试中被问到的问题,当我使用它时,程序因测试用例时间限制而失败。
对于此任务,最好的方法是什么?
for
循环,那么超时限制就不足为奇了。在大多数情况下,超过两层的循环都是值得怀疑的。 - MC Emperor