给定一个有序数组,输出所有满足ab=c的三元组,数组示例为:{-24, -15, -8, -6, 0, 3, 6, 9, 17, 36}
问问题
76 次
3 回答
3
我将建议O(n^2)
基于以下属性的解决方案:如果您修复a
并按顺序增加b
,则c
减少。因此,您可以执行以下操作:
for( i = 0; i < arr.size(); i++ ) // index of a
{
t = arr.size() - 1; // index of possible c
for( j = 0; j < arr.size(); j++ ) // index of b
{
a = arr[ i ];
b = arr[ j ];
c = a - b;
while( t >= 0 && arr[ t ] > c ) // using monotonicity
t--;
if( t >= 0 && arr[ t ] == c )
{ /* output a, b, c */ }
}
}
于 2013-02-18T18:57:06.727 回答
1
可以O(n^2)
通过将所有内容存储a - b
在哈希表中然后查询c
数组中每个元素的哈希值来完成。
于 2013-02-18T18:32:38.817 回答
0
哈斯克尔版本:
triples set =
[[a,b,c] | a <- set, b <- set, b /= a, c <- set, c /= b && c /= a, a - b == c]
*Main> 三元组 [-24, -15, -8, -6, 0, 3, 6, 9, 17, 36]
[[-15,-24,9],[-15,9,-24], [-6,-15,9],[-6,9,-15],[0,-6,6],[0,6,-6],[3,-6,9],[3, 9,-6],[9,-8,17],[9,3,6],[9,6,3],[9,17,-8]]
于 2013-02-19T01:04:27.327 回答