“给定一个由n个整数和一个整数b组成的数组A,找出A中是否存在两个元素c和d,使得c + d = b”

时间:2018-12-25 11:48:18

标签: algorithm

针对给定问题开发并实现数组算法 “给定一个由n个整数和一个整数b组成的数组A,找出A中是否存在两个元素c和d,使得c + d = b”

您的算法运行时间不得超过Θ(n log n)时间

1 个答案:

答案 0 :(得分:-1)

一种蛮力解决方案是遍历c并遍历d并测试c + d = b。但是,时间复杂度为$ O(n ^ 2)$。

以另一种方式,因为它只需要检查这种对的存在,就可以将问题转换为搜索问题,即给定c和b,是否在数组中存在等于d的元素。而且二进制搜索产生的时间复杂度为$ O(log n)$,因此值得一试。

算法

  1. 对数组排序(以$ O(nlog n)$);
  2. 循环遍历c,查找除c之外在数组中是否还有一个等于b-c的元素。排序数组中的二进制搜索产生时间复杂度$ O(log n)$。并循环c乘以$ n $。因此,此步骤的时间复杂度为$ O(nlog n)$。

总时间复杂度为$ O(nlog n)$。