标签: algorithm binary-tree
天真的解决方案是使用O(sqrtRoot of N)搜索所有对,但应该有一个更智能的解决方案......
我被暗示使用线程二叉树......任何想法?
答案 0 :(得分:3)
如果你需要一个大概数字,并且N足够大,你可以在O(1)中回答:如果你对非负(m,n)对感兴趣,只需回复pi * N * N / 4;如果你允许否定回复pi * N * N。
注意到每对(m,n)使得m * m + n * n 0,n> 0对应于半径为sqrt(N)的盘内的右上象限内的点。这种四分之一盘的面积是pi * N * N / 4。每个点(m,n)对应1x1平方。因此,您可以预期大约pi * N * N / 4这样的对覆盖四分之一盘的所有区域。
如果你需要一个精确的数字,那么我不知道任何比O(sqrt(N))运行得更快的算法。