摘要:
有N个数的数组,没有顺序。现在的问题是让你在数组中找出两个数,使得这两个数的和尽可能的接近0。想到的的方法是尝试所有数对的组合,之后找出其中和的绝对值最小的数对即可。但是这样做的时间复杂度是O(N^2),有没有更快一点的方法呢?这里给出一个O(NlogN)时间复杂度的算法。有一种比较直观的做法。对数组排好序之后。如果数字全部是正数,那么取最小的两个数的和。如果数字全部是负数,则取最大的两个数字的和。如果数字有正有负。那么我们必须枚举每一个xi,之后用二分在数组中找小于等于-xi的最大值和大于等于-xi的最小值。能与xi构成和的绝对值最小的数字,肯定就是这两个数字中的某一个。所有的xi都枚举过之 阅读全文