有人问我一个问题(在接受采访时问他)如何在满足以下条件的整数数组A []中找到三元组:
a [i] ^ 2 + a [j] ^ 2 = a [k] ^ 2
我在o(n ^ 2 logn)中完成它可以进行优化。
答案 0 :(得分:0)
您的方法的变体是O(n ^ 2)。
def findPythagoreanTriplets(array):
array = sorted(array)
for i in range(len(array)):
k = i + 2
for j in range(i + 1, len(array)):
while k < len(array) and (array[k] ** 2 < (array[i] ** 2 + array[j] ** 2)):
k += 1
if k < len(array) and (array[k] ** 2 == (array[i] ** 2 + array[j] ** 2)):
print "%d^2 + %d^2 = %d^2" % (array[i], array[j], array[k])
这是Python代码,但转换为C应该不难。 (实际上,这个问题似乎与语言无关,所以我不确定为什么你有c标签......)
这假设所有输入都是非负的。您也可以使其适用于负整数,但您需要按平方值排序,而不是按输入值排序(对于非负数,它们等效)。
不是进行二分搜索,而只是对k进行线性搜索,但是你可以从前一个j的搜索停止的地方开始搜索,所以搜索k是“免费的”。
答案 1 :(得分:-1)
至少你可以使用哈希表来存储方块。因此,每对的搜索(i ^ 2 + j ^ 2)将在O(1)中,并且在整个算法中将采用O(n ^ 2)