如何搜索数组并查找三个值的每个组合,其总和可以在java中被给定数字(x)整除。
换句话说,每个组合的位置(n1 + n2 + n3)%x == 0。
我知道这将是一个使用三重for循环的简单解决方案,但我需要时间复杂度为O(N ^ 2)的东西。
有什么想法吗?
答案 0 :(得分:0)
1 - 在列表中散列每个(元素%x)。
2 - 对列表中的每对元素求和(让我们称之为y)并执行modded_y = y%x。
3 - 检查x - modded_y是否在哈希表中。如果是,并且它不是其他2个数字中的一个,那么您找到了可能的组合。继续迭代和散列您找到的组合,以便它们不会重复。
这被称为中间战略中的见面。
它的复杂性是O(n +(n ^ 2 * 1))= O(n ^ 2)
答案 1 :(得分:0)
我将调用给定的数组A1。
1)创建两个结构
struct pair{
int first;
int second;
bool valid;
}

struct third{
int value;
int index;
}

2)使用嵌套循环,初始化所有可能的对的数组B1。
3)循环通过B1。 if(A1 [B1 [i] .first] + A1 [B1 [i] .second])%x == 0然后将B1 [i] .valid设置为true
4)创建一个Thirds数组A3,它存储A1中可被x整除的每个元素的索引和值。
5)使用嵌套循环,遍历A3的每个元素和B1的每个元素。如果B1.valid = true 使用A1 [A3.index]中的元素打印A1 [B1 [i] .first]和A1 [B1 [i] .second]。
应该在不使用任何三重循环的情况下为您提供所有组合。