算法类型算法简介

时间:2016-03-12 02:59:07

标签: algorithm

我正在学习算法,而我正在阅读“算法第3版简介”一书,在问题部分则介绍了下一个问题:

描述一个O(n * log(n)) - 时间算法,给定一组n个整数和另一个整数x,确定S中是否存在两个元素,其和是x。

我不知道它是否提出并命令Set或无序Set?

2 个答案:

答案 0 :(得分:2)

设x是你想要的总和。首先对数组进行排序。然后对于数组中的每个元素(a [i]),使用二分搜索找出数组中是否存在(x-a [i])。

伪代码:

 sort(a,n)
 for i : 1 to n
     if(binary_search(a,i+1,n-1,x-a[i]))
          return true
 return false

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

 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;

答案 1 :(得分:0)

给定一个排序数组,你可以找到是否有一对与O(n)算术运算相加的x。

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的元素。

相关问题