增长数量级的分类
【具体细节和要素】归并排序所需的比较次数在1/2NlgN到NlgN之间。
归并排序所需的运行时间的增长数量级是线性对数的。
设计更快的算法
假设:数组元素均不相同
2-sum问题的旧算法是平法级别的,而新算法是线性对数级别的。
【算法】
- 将数组排序
- 对于数组中的每个a[i],对-a[i]在数组中进行二分查找。
- 如果在i之后的元素中找到,就视为找到一个新的二元组。
【对于上述算法的说明】
- 如果二分查找不成功则会返回-1,因此我们不会增加计数器的值。
- 如果二分查找返回的j>i,我们就有a[i]+a[j]=0,增加计数器的值。
- 如果二分查找返回的j在0到i之间,我们也有a[i]+a[j]=0,但不能增加计数器的值,以免重复计数。
【假设】当且仅当-(a[i]+a[j])在数组中(不是a[i]和a[j])时,整数对为某个和为0的三元组的一部分。