编辑:我假设整数是有序的,你的回答中没有提到。对于无序整数,无法进行优化,您必须使用蛮力计数方法。如果它们已排序,请继续阅读。
问题是,您在这里并不需要大量编程。这更像是一个数学问题。
首先,一个整数出现 1 次、2 次或更多次都没有关系。无论如何,由此产生的三胞胎一定是独一无二的。这简化为仅计算数组中有多少不同的整数。命名该变量s
。
然后我们只应用以下公式:
result = 0;
for(first_index = 0; first_index < s; first_index++) {
for(second_index = first_index + 1; second_index < s; second_index++) {
result += s - second_index - 1;
}
}
return result;
然而,这可以被简化。现在,如果我们推断s - second_index - 1
一个外部循环的值,那就是从 0 到s - 2
反转的所有整数的行!我们不是很高兴它的总和有一个公式:其中n
是一个整数,n * (n + 1) / 2
是第一个整数的总和n
。
这意味着我们可以优化我们的程序:
result = 0;
for(first_index = 0; first_index < s; first_index++) {
result += (s - 2 - first_index) * (s - 2 - first_index + 1) / 2;
}
请注意,我们可以将其进一步简化为result = (x^3 - 3*x^2 + 2*x) / 6
。