答案 0 :(得分:2)
一个可以加快速度的简单解决方案是为列表中的1/z
中的每个z
存储c
,并为每对x,y
存储a,b
1/z
- 使用二进制搜索获得最高1/x + 1/y + 1/z < 1
(在辅助列表中),以便O(log(n)*n^2 + Y)
- 这将有效地修剪第三个列表中的许多搜索并让您加快速度。
这会将时间复杂度降低到Y
,其中O(n^3)
是输出大小(生成的三元组数)。
但请注意,由于输出大小本身为n^3
(考虑3个列表,所有元素都在> 3.333) - 您无法避免最坏的情况,因为您可能需要生成{{1}三胞胎。
如果您只想要计数,建议的方法可以在O(n^2*logn)
中轻松找到。