Algorithm “;给定一个由n个整数和一个整数b组成的数组A,找出A中是否存在两个元素c和d,例如c+;d=b";

Algorithm “;给定一个由n个整数和一个整数b组成的数组A,找出A中是否存在两个元素c和d,例如c+;d=b";,algorithm,Algorithm,针对给定问题开发并实现一个数组算法 给定一个由n个整数和一个整数b组成的数组A,找出A中是否存在两个元素c和d,例如c+d=b 您的算法运行时间不应超过Θ(n log n)时间蛮力解决方案是循环c和循环d,并测试c+d=b。但是,时间复杂度为$O(n^2)$ 换一种方式考虑,因为它只需要检查这样一对的存在,问题可以转化为搜索问题,即给定c和b,数组中是否有等于d的元素。二进制搜索产生的时间复杂度为$O(logn)$,因此值得一试 阿尔戈 对数组进行排序(单位为$O(nlog n)$) 循环c,找

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


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

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

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

阿尔戈

  • 对数组进行排序(单位为$O(nlog n)$)
  • 循环c,找出数组中除了c之外是否还有一个元素等于b-c。排序数组中的二进制搜索产生时间复杂度$O(logn)$。然后循环c因子$n$。因此,此步骤的时间复杂度为$O(nlogn)$

  • 总的时间复杂度是$O(nlog n)$。

    “开发和实现”:这确实是你应该做的。当你遇到一个特定的问题时,让我们知道。使用两个指针可以将搜索部分减少到
    O(n)
    ,尽管总的复杂度仍然是
    O(n log n)
    由于排序问题。@FeiXiang谢谢你的评论。你介意再详细一点吗?我想知道。查一下。这个问题经常被用作双指针技术的一个例子,所以有很多很好的解释。