首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法简介算法类型

算法简介算法类型
EN

Stack Overflow用户
提问于 2016-03-12 10:59:07
回答 2查看 69关注 0票数 0

我正在学习算法,正在阅读“算法导论第三版”这本书,在一个问题部分,它描述了下一个问题:

描述一个O(n*-time(N))-time算法,该算法在给定一个由n个整数和另一个整数x组成的集合S的情况下,确定S中是否存在两个和恰好等于x的元素。

我不知道它是提出有序集还是无序集?

EN

回答 2

Stack Overflow用户

发布于 2016-03-12 11:05:48

设x是你想要得到的和。首先对数组进行排序。然后,对于array (ai)中的每个元素,使用二进制搜索查找数组中是否存在(x-ai)。

伪代码:

代码语言:javascript
复制
 sort(a,n)
 for i : 1 to n
     if(binary_search(a,i+1,n-1,x-a[i]))
          return true
 return false

其他方法:排序后,先用两个指针,最后用两个指针检查:

代码语言:javascript
复制
 while(first < last) {
        if(a[first]+a[last] == x) return true;
        else if(a[first]+a[last] < x) first++;
       else if(a[first]+a[last] > x) last--;
    }
    return false;
票数 2
EN

Stack Overflow用户

发布于 2016-03-12 11:17:57

给定一个已排序的数组,您可以找到是否存在一对具有O(n)算术运算的x求和。

代码语言:javascript
复制
i := 0
j := len(A) - 1
while i < j {
    if A[i] + A[j] < x {
        i += 1
    } else if A[i] + A[j] == x {
        return true
    } else if A[i] + A[j] > x {
        j -= 1
    }
}
return false

考虑到这一点,您可以通过对数组进行排序,然后使用上面的算法,使用O(n log n)算术运算来确定是否有任何数组包含一对求和为x的元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35953238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档