如何设计分而治之算法来检查是否存在ai,aj对,从而使得ai-aj = M在数组中?

时间:2018-07-04 21:18:49

标签: arrays algorithm sorting divide-and-conquer

给出一个整数a1,a2,...,an的列表,编写一种算法,检查是否存在对ai,aj以使ai-aj =M。算法的时间复杂度应为O(nlogn ) 或更好。 就我而言,当问题为ai + aj = M时,这个问题很容易解决。但是当条件是ai-aj = M时,我现在很麻烦。

1 个答案:

答案 0 :(得分:0)

您可以使用两种分治法来解决这个问题。

首先,使用合并排序(O(logn))对集合进行排序。

然后,您可以一个一个地查看ai元素,并查看将成为aj的M-ai是否是一个元素。由于数组已排序,因此您可以运行二进制搜索,这也是一种分而治之的算法,并且以O(logn)运行。在最坏的情况下,您将需要执行n次,对于列表中的每个元素一次。

因此,该算法的运行时间为O(logn + n * logn)= O(nlogn)